社区讨论

50分求调

P1892[BalticOI 2003] 团伙参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@lxpjoqdy
此快照首次捕获于
2024/06/22 11:13
2 年前
此快照最后确认于
2024/06/22 14:43
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int n,m,dr[5005]={0},father[5005];
int sum,cnt[5001]={0};
int find(int x){
	if(father[x]!=x)
	father[x]=find(father[x]);  
	return father[x];
}
void join(int x,int y) {
    int fx=find(x);
	int fy=find(y);  
    if(fx!=fy)
    father[y]=x;
    return;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		father[i]=i;
	}
	for(int i=1;i<m;i++){
		char opt;
		int p,q;
		cin>>opt>>p>>q;
		if(opt=='F'){
			join(p,q);
		}
		else{
			if(dr[p]==0){
				dr[p]=find(q);
			} 
            else {
            	join(q,dr[p]);
			}
            if(dr[q]==0){
            	dr[q]=find(p);
			} 
            else {
            	join(p,dr[q]);
			}
		}
	}
    for(int i=1;i<=n;i++){
    	cnt[find(i)]++;
	}
    for(int i=1;i<=n;i++){
    	if(cnt[i]!=0){
    	    sum++;	
		}
	}
    cout<<sum;
	return 0;
}

回复

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

正在加载回复...