并查集 求助
查看原帖
并查集 求助
1024189
funeral楼主2023/12/22 18:16
#include<bits/stdc++.h>
using namespace std;
//int f[30000005];
int n,m;
struct point{
	int vis,f,l;
}a[11451444];

int find(int x){
	if(a[x].f==x)return x;
	return a[x].f=find(a[x].f);
	
}
void join(int x,int y){
	a[find(x)].f=find(y);
	a[y].l=x;
}
void send(int x,int y){
	a[x].vis+=y;
	if(a[x].l==0)return;
	send(a[x].l,y);
	
}

int main(){
	cin>>n>>m;
	
	for(int i=1;i<=n;i++)a[i].f=i,a[i].l=i,a[i].vis=0;
	
	for(int i=1;i<=m;i++){
		int s;
		cin>>s;
		if(s==1){
			int x,y;
			cin>>x>>y;
			join(x,y);
		}else{
			int p,t;
			cin>>p>>t;
			send(a[p].f,t);
		}
	}
	for(int i=1;i<=n;i++){
		cout<<a[i].vis<<" ";
	}
	
	return 0;
}
2023/12/22 18:16
加载中...