90分,WA2,求hack数据,玄关
查看原帖
90分,WA2,求hack数据,玄关
1396852
OWPPIE楼主2025/6/19 10:08
#include<bits/stdc++.h>
using namespace std;
struct mn{
	long long v,sum;
};
long long jk,t,n,ans,s[200005];
vector<mn> a[200005];
int dfs(int x,int fa,long long vis){
	if(a[x].size()==1){
		return vis;
	}
	for(int i=0;i<a[x].size();i++){
		if(fa==a[x][i].v) continue;
		s[x]+=dfs(a[x][i].v,x,a[x][i].sum);
    }
    return min(s[x],vis);
}
int dfs1(int x,int fa,long long vis){
	if(a[x].size()==1){
		s[x]+=min(s[fa]-vis,vis);
		ans=max(ans,s[x]);
		return 0;
	}
	for(int i=0;i<a[x].size();i++){
		if(fa==a[x][i].v) continue;
		dfs1(a[x][i].v,x,a[x][i].sum);
    }
    s[x]+=min(s[fa]-min(s[x],vis),vis);
    ans=max(ans,s[x]);
    return 0;
}
int main(){
	s[0]=0;
	cin>>t;
	while(t--){
		ans=0;
		jk=0;
		cin>>n;
	    for(int i=1;i<n;++i){
	        int x,y,z;
	        scanf("%d%d%d",&x,&y,&z);
	        a[x].push_back({y,z});
	        a[y].push_back({x,z});
	        s[i]=0;
	    }
	    s[n]=0;
	    for(int i=1;i<=n;++i){
	        if(a[i].size()>1){
	        	dfs(i,0,0);
	        	dfs1(i,0,0);
	        	jk=1;
	        	break;
			}
	    }
	    if(jk==0){
	    	cout<<a[1][0].sum<<'\n';
		}else{
			cout<<ans<<'\n';
		}
	    for(int i=1;i<=n;++i){
	        a[i].clear();
	    }
	}
    return 0;
}
2025/6/19 10:08
加载中...