题解:AT_abc373_d [ABC373D] Hidden Weights

可以发现一个性质:对于图的每个连通分量,一旦在其中任何顶点上的值固定,则所有写入的值都是确定的。

我们可以逐个 DFS 每个连通分量,按照题目的要求给每个点赋值,初始搜索的点值设成 \(0\) 即可。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
vector<pair<int,int>> g[200010];
bool vi[200010];
int ans[200010];
void sear(int o){
	vi[o]=1;
	for(auto &[v,w]:g[o]){
		if(!vi[v]){
			vi[v]=1;
			ans[v]=ans[o]+w;
			sear(v);
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back({v,w});
		g[v].push_back({u,-w});
	}
	for(int i=1;i<=n;i++){
		if(vi[i]) continue;
		sear(i);
	}
	for(int i=1;i<=n;i++){
		cout<<ans[i]<<' ';
	}
}
posted @ 2024-10-02 17:46  cly312  阅读(39)  评论(0)    收藏  举报