首页 > 技术文章 > P2078 朋友

ruanmowen 2020-04-19 08:38 原文

算法

并查集+map

思路

与负数,用map

代码

#include<bits/stdc++.h>
#define r(i,a,b) for(int i=a;i<=b;i++)
using namespace std;int n,m,p,q,u,v,tat,tot;
map<int,int>f;//STl大法好
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
void judge(int x,int y){f[find(x)]=find(y);}
bool too(int x,int y){return find(x)==find(y);}
int main()
{
    scanf("%d%d%d%d",&n,&m,&p,&q);//输入
    r(i,-1*m,n) f[i]=i;//初始化
    r(i,1,p+q)//直接一起做
     {
        scanf("%d%d",&u,&v);
        judge(u,v);
     }
    r(i,-1*m,-1)
     if(too(f[i],-1)) tat++;//找连接在一起的
    r(i,1,n)
     if(too(f[i],1)) tot++;//同理
    printf("%d",min(tat,tot));//几对朋友就是最小值
}

  

 

推荐阅读