社区讨论

WA掉一个点,对拍无果嘤

学术版参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo83opri
此快照首次捕获于
2023/10/27 12:15
2 年前
此快照最后确认于
2023/10/27 12:15
2 年前
查看原帖
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 条回复,欢迎继续交流。

正在加载回复...