简单的BFS:
#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
using namespace std;
class Node{
public:
int city1,city2,distance;
Node(int city1,int city2,int distance){
this->city1 = city1;
this->city2 = city2;
this->distance = distance;
}
};
bool ever[100001];
vector<Node>road[10001];
void bfs(int capital,int &max,int distance){
ever[capital]= 1;
for(int i=0;i<road[capital].size();++i){
if(ever[road[capital][i].city2]==0){
if(distance + road[capital][i].distance > max) max = distance + road[capital][i].distance;
bfs(road[capital][i].city2,max,distance + road[capital][i].distance);
}
}
}
int main(){
int n,k;
while(scanf("%d%d",&n,&k)!=EOF){
memset(road,0,sizeof(road));
memset(ever,0,sizeof(ever));
for(int i=0;i<n-1;++i){
int tmp1,tmp2,tmp3;
scanf("%d%d%d",&tmp1,&tmp2,&tmp3);
road[tmp1].push_back(Node(tmp1,tmp2,tmp3));
road[tmp2].push_back(Node(tmp2,tmp1,tmp3));
}
int max = 0;
bfs(k,max,0);
printf("%d\n",max);
}
return 0;
}