82,并查集为啥不行啊
查看原帖
82,并查集为啥不行啊
1061461
Milonia楼主2024/3/3 23:28

rt

虽然是并查集,但是有修改

WA#9、WA#11,82分

代码如下

// Author: Milonia     (O v O)

#include <iostream>
using namespace std;

#define int long long
#define int_INF 0x3f3f3f3f
#define endl '\n'

int n;
const int N=210;
int p[N*N]; //p[i] 表示谁能传给i,且i为根节点

int find(int x){
	if (x!=p[x]) p[x]=find(p[x]);
	return p[x];
}

void h(int s,int d) { //并查集处理
	if (find(s)!=find(d)) {
		p[d]=s; // s能传给d,当然s的也能传给d的所有子节点
	}
}

signed main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	
	cin>>n;
	for (int i=1;i<=n;i++) p[i]=i; //初始化
	
	for (int i=1;i<=n;i++) { //处理每一个人
		while (1) {
			int a; cin>>a;
			if (a==0) break;
			
			h(i,a);
			// cout<<i<<' '<<a<<' '<<endl;
		}
	}
	
	int ans=0;
	for (int i=1;i<=n;i++) if (i==p[i]) { //如果 能传给他自己的是他本身,那么ans++
		// cout<<i<<endl;
		ans++;
	}
	
	cout<<ans<<endl;
	
	return 0;
}
2024/3/3 23:28
加载中...