社区讨论
WA掉一个点,对拍无果嘤
学术版参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo83opri
- 此快照首次捕获于
- 2023/10/27 12:15 2 年前
- 此快照最后确认于
- 2023/10/27 12:15 2 年前
题目链接:U81904 【模板】树的直径
CPP#include<bits/stdc++.h>
#define N 501000
#define int long long
using namespace std;
int n,u,v,w;
vector<int> to[N], val[N];
int dis1[N], vis1[N], md1, fst;
int dis2[N], vis2[N], md2;
int ans;
inline void read(int &a){
int x = 0, f = 1;
char c = getchar();
while(c<'0' || c>'9'){
if(c == '-') f = -f;
c = getchar();
}
while(c>='0' && c<='9'){
x = (x<<3) + (x<<1) + (c-'0');
c = getchar();
}
a = x * f;
}
inline void dfs1(int x){
vis1[x] = true;
for(int i = 0; i < to[x].size(); i++){
int des = to[x][i];
int len = val[x][i];
if(vis1[des] == true) continue;
dis1[des] = dis1[x] + len;
dfs1(des);
}
}
inline void dfs2(int x){
vis2[x] = true;
for(int i = 0; i < to[x].size(); i++){
int des = to[x][i];
int len = val[x][i];
if(vis2[des] == true) continue;
dis2[des] = dis2[x] + len;
dfs2(des);
}
}
signed main(){
// freopen("data.in", "r", stdin);
// freopen("ans.out", "w", stdout);
read(n);
for(int i = 1; i <= n-1; i++){
read(u), read(v), read(w);
to[u].push_back(v), val[u].push_back(w);
to[v].push_back(u), val[v].push_back(w);
}
dfs1(1);
for(int i = 1; i <= n; i++){
if(dis1[i] > dis1[fst]){
fst = i;
}
}
dfs2(fst);
ans = -1e18;
for(int i = 1; i <= n; i++){
if(dis2[i] > ans){
ans = dis2[i];
}
}
cout<<ans;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...