P2078 朋友
算法
并查集+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));//几对朋友就是最小值
}
细雨斜风作晓寒,
淡烟疏柳媚晴滩。
入淮清洛渐漫漫。
雪沫乳花浮午盏,
蓼茸蒿笋试春盘。
人间有味是清欢。

浙公网安备 33010602011771号