可以發現一個性質:對於圖的每個連通分量,一旦在其中任何頂點上的值固定,則所有寫入的值都是確定的。
我們可以逐個 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]<<' ';
}
}