题解:AT_abc327_d [ABC327D] Good Tuple Problem
OldDriverTree · · 题解
这题显然是种类并查集做法最简单啊,题解区里怎么没有这种做法?这篇题解就来讲种类并查集做法。
双倍经验:P1892 [BOI2003] 团伙。
Solution
由于
对于每个限制 No,否则就有两种情况:如果
Code
#include<bits/stdc++.h>
using namespace std;
const int N=2e5;
int n,m,a[N],b[N];
int fa[N<<1|1];
int find(int x) {
return fa[x]^x?fa[x]=find(fa[x]):x;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=0;i<m;i++) scanf("%d",a+i);
for (int i=0;i<m;i++) scanf("%d",b+i);
for (int i=1;i<=n<<1;i++) fa[i]=i;
for (int i=0;i<m;i++) {
int x=find(a[i]),y=find(b[i]);
if (x==y) return printf("No"),0;
fa[find(n+a[i])]=y,fa[find(n+b[i])]=x;
}
printf("Yes");
return 0;
}