一个有意思的事情
查看原帖
一个有意思的事情
658762
sxq9楼主2024/10/21 21:33

我原先用了book数组来防止重复访问,这个多带参数防止,本质上是一个意思,但为什么要这样?

#include<bits/stdc++.h>
#define int long long
using namespace std;
int to[1000010],head[1000010],len[1000010],nxt[1000010],book[1000010],book2[1000010],cnt,sum=0,dp[1000010]; 
void add(int u,int v,int w){
	to[++cnt]=v;
	len[cnt]=w;
	nxt[cnt]=head[u];
	head[u]=cnt;
}
void dfs(int point,int fa){
	for(int i=head[point];i;i=nxt[i]){
		int v=to[i];
//		if(!book[v]){
		if(v!=fa)	
			book[v]=1;
			dfs(v,point);
			dp[point]=max(dp[point],dp[v]+len[i]);
		}
	}
	for(int i=head[point];i;i=nxt[i]){
		int v=to[i];
//		if(!book2[v]){
		if(v!=fa)
			book2[v]=1;
			sum+=dp[point]-dp[v]-len[i];
		}
	} 
}
main(){
	int n,s;
	cin>>n>>s;
	for(int i=1;i<=n-1;i++){
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);		
	}
//	cout<<"wcnm";
	book[s]=1;
	book2[s]=1;
	dfs(s);
	cout<<sum;
	return 0;
}
2024/10/21 21:33
加载中...