[cf741C]Arpa’s overnight party and Mehrdad’s silent entering

直接令2i-1和2i的位置不相同,相当于有2n条边,对其进行二分图染色即可(这张图一定不存在奇环)。

假设给出的n条关系是A类边,2i-12i的边是B类边,可以发现一条路径一定是AB交替(因为A/B的终点一定不可能是A/B的起点),那么环就一定是有等量的A边和B边,即偶环。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define N 200005
 4 struct ji{
 5     int nex,to;
 6 }edge[N<<1];
 7 int E,n,a[N],head[N],x[N],y[N];
 8 void add(int x,int y){
 9     edge[E].nex=head[x];
10     edge[E].to=y;
11     head[x]=E++;
12 }
13 void dfs(int k,int sh){
14     if (a[k]>=0)return;
15     a[k]=sh;
16     for(int i=head[k];i!=-1;i=edge[i].nex)dfs(edge[i].to,sh^1);
17 }
18 int main(){
19     scanf("%d",&n);
20     memset(head,-1,sizeof(head));
21     memset(a,-1,sizeof(a));
22     for(int i=1;i<=n;i++){
23         scanf("%d%d",&x[i],&y[i]);
24         add(x[i],y[i]);
25         add(y[i],x[i]);
26         add(2*i-1,2*i);
27         add(2*i,2*i-1);
28     }
29     for(int i=1;i<=2*n;i++)
30         if (a[i]==-1)dfs(i,0);
31     for(int i=1;i<=n;i++)printf("%d %d\n",a[x[i]]+1,a[y[i]]+1);
32 }
View Code
原文地址:https://www.cnblogs.com/PYWBKTDA/p/11254620.html