蚂蚁想知道这棵树上距离最远的两个点之间的距离
给你一个具有 n 个节点的树
求这棵树上距离最远的两个点之间的距离
输入格式
第一行一个整数 n ,(1≤n≤104)
接下来 n−1 行,每行三个整数 x,y,z 表示 x 与 y 之间有一条长度为 z 的边 (1≤x,y≤n,1≤z≤104)
输出格式
一个整数表示树上距离最远的两个点之间的距离
样例
Input
5
1 2 9
1 3 3
1 5 2
2 4 10
单击复制
Output
22
单击复制
简单模板题
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 7;
typedef long long ll;
vector<pair<int ,int> >v[N];
int vis[N];
ll dis[N];
ll ans;
int bfs(int x)
{
memset(vis,0,sizeof(vis));
memset(dis,0,sizeof(dis));
int point=0;
queue q;
q.push(x);
vis[x]=1;
while(!q.empty())
{
int f=q.front();
q.pop();
if(dis[f]>ans)
{
ans=dis[f];
point=f;
}
pair<int ,int> t;
for(int i=0;i<v[f].size();i++)
{
t=v[f][i];
if(vis[t.first]==0)
{
vis[t.first]=1;
dis[t.first]=dis[f]+t.second;
q.push(t.first);
}
}
}
return point;
}
int main()
{
int n;
int x,y,z;
cin>>n;
n–;
while(n–)
{
cin>>x>>y>>z;
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
ans=0;
int point=bfs(1);
ans=0;
int t=bfs(point);
cout<<ans<<endl;
}