ABC D RE 求调
  • 板块学术版
  • 楼主Quartz_Blocks
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/28 22:41
  • 上次更新2024/9/28 22:51:17
查看原帖
ABC D RE 求调
1059176
Quartz_Blocks楼主2024/9/28 22:41

re

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 200010;
const int maxm = maxn;
int hd[maxn];
struct edge{
	int u,v,w,nxt;
}e[maxm];
int n,m,cnt,s;
int sum[maxn];
void add_edge(int u,int v,int w){
	e[++cnt] = edge{u,v,w,hd[u]};
	hd[u] = cnt;
	return ;
}
int f[maxn];
int find(int x){return f[x] = (f[x] == x ? x : find(f[x]));}
bool used[maxn];
void dfs(int now,int num){
//	if(used[now]) return;
	for(int i = hd[now];i != 0;i = e[i].nxt){
		int v = e[i].v;
		if(used[v] == 0){
//			cout << now << ' ' << v << endl;
			used[v] = 1;
			sum[v] = num+e[i].w;
			dfs(v,sum[v]);
		}
	}
}	
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin >> n >> m;
	for(int i = 1;i <= n;i++) f[i] = i;
	for(int i = 1,u,v,w;i <= m;i++){
		cin >> u >> v >> w;
		int rootx = find(u);
		int rooty = find(v);
		if(rootx != rooty) f[rootx] = rooty;
		add_edge(u,v,w)	;
		add_edge(v,u,-w);
	}
//	sum[1] = 0;

	
	for(int i = 1;i <= n;i++){
		if(used[find(i)]) continue;
//		cout << i << ' ' << find(i) << endl;
		used[find(i)] = 1;
		dfs(find(i),0);
	}
	for(int i = 1;i <= n;i++) cout << sum[i] << ' ';
	return 0;
}
2024/9/28 22:41
加载中...