蜜汁RE求问
查看原帖
蜜汁RE求问
1236806
wjr_jok楼主2024/11/28 16:45
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+1;
struct jgt{
	int to,s;
};
int n,st,x,y,z;
int dp[N],zy[N];
vector<jgt> lj[N];
void csh(int x,int fa,int cnt){
	zy[x]=cnt;
	for(int i=0;i<lj[x].size();i++){
		if(lj[x][i].to==fa){
			continue;
		}
		csh(lj[x][i].to,x,cnt+lj[x][i].s);
	} 
}
void solve(int x,int fa){
	int maxx=-1;
	for(int i=0;i<lj[x].size();i++){
		if(lj[x][i].to==fa){
			continue;
		}
		solve(lj[x][i].to,x),maxx=max(maxx,zy[lj[x][i].to]);
	} 
	if(maxx!=-1){
		zy[x]=maxx;
	}
	for(int i=0;i<lj[x].size();i++){
		if(lj[x][i].to==fa){
			continue;
		}
		dp[x]+=maxx-zy[lj[x][i].to];
	}
}
signed main(){
	cin>>n>>st;
	for(int i=1;i<n;i++){
		cin>>x>>y>>z;
		lj[x].push_back({y,z});
		lj[y].push_back({x,z});
	}
	csh(st,0,0);
//  solve(st,0);
	cout<<dp[st];
	return 0;
}

读入的数据是一颗由一条长度为 499999499999 和一条长度为 22 的链组成的以 11 为根的树,遍历到 2590025900 时RE

2024/11/28 16:45
加载中...