社区讨论

70ptsTLE玄关

P8710[蓝桥杯 2020 省 AB1] 网络分析参与者 2已保存回复 19

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
19 条
当前快照
1 份
快照标识符
@mhjhowt6
此快照首次捕获于
2025/11/04 02:44
4 个月前
此快照最后确认于
2025/11/04 06:22
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>

#define ll long long
#define ris(x,y,z) for(ll x=y;x<z+1;++x)
#define ful(x,y,z) for(ll x=y;x>z-1;--x)

using namespace std;

const ll N=1e5+5;

ll n,m,v[N]={1};

char vis[N];

struct edge{
	ll n,t;
}e[N<<1];
ll h[N<<1],cnt=0;

inline void add(ll u,ll v){
	e[++cnt]={h[u],v};
	h[u]=cnt;
}

map<int,int> pre;

inline ll find(ll x){
	if(pre[x]==x)
		return x;
	return pre[x]=find(x);
}

inline void join(ll x,ll y){
	ll fx=find(x),fy=find(y);
	if(fx-fy){
		pre[fx]=fy;
		add(fx,fy);
		add(fy,fx);
	}
}

inline void dfs(ll u,ll w){
	v[u]+=w;
	vis[u]=0;
	for(ll i=h[u];i;i=e[i].n){
		if(vis[e[i].t])
			dfs(e[i].t,w);
	}
	return;
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m;
	ll no,x,y;
	while(m--){
		cin>>no>>x>>y;
		switch(no){
			case(1):{
				pre[x]=y;
				add(x,y);
				add(y,x);
				break;
			}
			case(2):{
				memset(vis,1,sizeof(vis));
				dfs(x,y);
				break;
			}
		}
	}
	ris(i,1,n)
		cout<<v[i]<<' ';
	return 0;
}

回复

19 条回复,欢迎继续交流。

正在加载回复...