为什么不可以这样子做?样例过了
查看原帖
为什么不可以这样子做?样例过了
560044
wangyi_c楼主2023/10/4 20:59
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e5+10;
int n,s,ans;
int t[maxn],tot,maxx,vis[maxn];
vector <pair<int,int> > g[maxn];
void dfs(int now,int val){
	vis[now]=1;
	if(g[now].size()==1){
		t[++tot]=val;
		maxx=max(maxx,val);
		return ;
	}
	for(auto u:g[now]){
		int v=u.first;
		int w=u.second;
		if(vis[v]) continue;
		dfs(v,w+val);
	}
	return ;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n>>s;
	for(int i=1;i<n;i++){
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back(make_pair(v,w));
		g[v].push_back(make_pair(u,w));
	}
	dfs(s,0);
	for(int i=1;i<=tot;i++){
		ans+=maxx-t[i];
	}
	cout<<ans;
	return 0;
}

思路就是把每条链的权值都算出来,然后找出最大值,答案难道不是

∑i=1totmaxx−ti\sum_{i = 1}^{tot} maxx-t_i

吗?

求大佬解答qwq

2023/10/4 20:59
加载中...