IDK我的算法出了什么问题。给WA
我正在使用Dijkstra找到所有节点距起始节点的距离,然后打印最大距离。
链接:http://www.spoj.com/problems/PT07Z/
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,start,end) for(int i=start;i<end;i++)
#define pii pair< int, int >
struct comp {
bool operator() (const pii &a, const pii &b) {
return a.second > b.second;
}
};
priority_queue< pii ,vector< pii >, comp > Q;
#define Size 10009
vector<pii > G[Size];
int D[Size],Visited[Size];
int main() {
int n,m,s=1,t,a,b,p,q,d;
scanf("%d",&t);
REP(i, t-1) {
scanf("%d %d",&a,&b);
G[a].push_back(pii(b, 1));
G[b].push_back(pii(a, 1));
}
REP(i, t+2){D[i]=1000000;Visited[i]=0;}
D[s]=0;
Q.push(pii(s,0));
while (!Q.empty()) {
a=Q.top().first;
Q.pop();
if (Visited[a]) continue;
m=G[a].size();
REP(i, m){
p=G[a][i].first;
if (!Visited[p] && D[a]+1<D[p]) {
D[p]=D[a]+1;
Q.push(pii(p,D[p]));
}
}
Visited[a]=1;
}
m=0;
FOR(i, 1, t+1) if(D[i]>m && D[i]!=1000000) m=D[i];
printf("%d\n",m);
return 0;
}
答案 0 :(得分:0)
你不需要使用dijsktra来解决这个问题,因为边缘没有加权。
此问题与:"Find Tree Diameter"有关,您可以轻松解决:
希望它有所帮助。