标签:head silent int Arpa 类边 memset Mehrdad edge 2i
直接令2i-1和2i的位置不相同,相当于有2n条边,对其进行二分图染色即可(这张图一定不存在奇环)。
假设给出的n条关系是A类边,2i-1和2i的边是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
标签:head,silent,int,Arpa,类边,memset,Mehrdad,edge,2i 来源: https://www.cnblogs.com/PYWBKTDA/p/11254620.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。