zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    输入一批整数,输出最大最小值,输入0结束
    获取最低价手机价格
    插入数值
    猜数游戏
    数字金字塔
    输出星期数
    9*9乘法表
    linux 出core设置问题
    linux socket连接中 ERRNO错误
    linux c 获取头文件函数getenv
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/11254620.html
Copyright © 2011-2022 走看看