1 条题解

  • 0
    @ 2023-3-13 12:02:45

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    int f[20010];//描述集合关系
    
    //查:查询元素的根 
    int find(int x){
    	return f[x]==x?x:f[x]=find(f[x]);
    } 
    
    //并:合并元素xy
    void merge(int x,int y){
    	int fx = find(x);
    	int fy = find(y);
    	if(fx != fy){
    		f[fx] = fy;
    	}
    } 
    
    int main(){
    	int n,m,p,q;
    	cin>>n>>m>>p>>q; 
    	int ra = 0,rb = 0;//ab公司每个集合中和小明、小明认识的人的数量
    	//初始化 
    	for(int i = 1;i <= n + m;i++) f[i] = i;
    	
    	//读入p个关系
    	int x,y;
    	for(int i = 1;i <= p;i++){
    		cin>>x>>y;
    		merge(x,y); 
    	} 
    	
    	//读入q个关系
    	for(int i = 1;i <= q;i++){
    		cin>>x>>y;
    		x = x * -1;
    		y = y * -1;
    		merge(x+n,y+n);
    	} 
    	
    	//求和1号以及n+1号是朋友的人的数量
    	for(int i = 1;i <= n;i++){
    		if(find(i) == find(1)) ra++;
    	} 
    	
    	for(int i = n+1;i <= n + m;i++){
    		if(find(i) == find(n+1)) rb++; 
    	} 
    	
    	cout<<min(ra,rb);
    } 
    
    
    • 1

    信息

    ID
    1988
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者