HDU 4460 SPFA
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
#include <map>
using namespace std;
const int MAXN = 1000 + 5;
#define inf (1000000007)
int d[MAXN];
struct D
{
int u, d;
bool operator < (const D&rbs)const{
return d < rbs.d;
}
};
vector<int>lin[MAXN];
queue<int>que;
char s1[MAXN], s2[MAXN];
map<string, int>mm;
int ans;
int vis[MAXN];
int n, m;
void bfs(int u)
{
// printf("org u = %d
", u);
for(int i = 1 ; i <= n ; i++)
d[i] = inf, vis[i] = 0;
while(!que.empty()) que.pop();
vis[u] = 1, d[u] = 0, que.push(u);
while(!que.empty()){
u = que.front(); que.pop();
// printf("u = %d
", u);
vis[u] = 0;
for(int j = 0 ; j < (int)lin[u].size() ; j++){
int v = lin[u][j];
if(d[v] > d[u] + 1){
// printf("v = %d
", v);
d[v] = d[u] + 1;
if(vis[v] == 0) que.push(v), vis[v] = 1;
}
}
}
// for(int i = 1 ; i <= n ; i++) printf("d[%d] = %d
", i, d[i]);
for(int i = 1 ; i <= n ; i++)
ans = max(ans, d[i]);
}
int main()
{
// freopen("HDU 4460.in", "r", stdin);
while(scanf("%d", &n) != EOF && n){
mm.clear();
for(int i = 1 ; i <= n ; i++){
scanf("%s", s1);
mm[s1] = i;
lin[i].clear();
}
scanf("%d", &m);
for(int i = 1 ; i <= m ; i++){
scanf("%s%s", s1, s2);
// printf("first = %d, second = %d
", mm[s1], mm[s2]);
lin[mm[s1]].push_back(mm[s2]);
lin[mm[s2]].push_back(mm[s1]);
}
ans = 0;
for(int i = 1 ; i <= n ; i++)
bfs(i);
if(ans == inf) printf("-1
");
else printf("%d
", ans);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.