題解:AT_abc373_d [ABC373D] Hidden Weights

cly312發表於2024-10-02

可以發現一個性質:對於圖的每個連通分量,一旦在其中任何頂點上的值固定,則所有寫入的值都是確定的。

我們可以逐個 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]<<' ';
	}
}

相關文章