• 封锁阳光大学


    封锁阳光大学
    二分图染色问题,整个图的染色情况实际上(等价于)只有一种,所以从黑色和白色中取最小的就可以了,因为图不联通,所以取最小的就可以了。

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<queue>
      4 #include<algorithm>
      5 #include<cmath>
      6 #include<ctime>
      7 #include<set>
      8 #include<map>
      9 #include<stack>
     10 #include<cstring>
     11 #define inf 2147483647
     12 #define For(i,a,b) for(register int i=a;i<=b;i++)
     13 #define p(a) putchar(a)
     14 #define g() getchar()
     15 //by war
     16 //2017.11.4
     17 using namespace std;
     18 int sum[3];
     19 int n,m;
     20 int x,y;
     21 int ans;
     22 int vis[10010];
     23 struct node
     24 {
     25     int n;
     26     node *next;
     27 }*e[100010];
     28 
     29 void in(int &x)
     30 {
     31     int y=1;
     32     char c=g();x=0;
     33     while(c<'0'||c>'9')
     34     {
     35     if(c=='-')
     36     y=-1;
     37     c=g();
     38     }
     39     while(c<='9'&&c>='0')x=(x<<1)+(x<<3)+c-'0',c=g();
     40     x*=y;
     41 }
     42 void o(int x)
     43 {
     44     if(x<0)
     45     {
     46         p('-');
     47         x=-x;
     48     }
     49     if(x>9)o(x/10);
     50     p(x%10+'0');
     51 }
     52 
     53 void push(int x,int y)
     54 {
     55     node *p;
     56     p=new node();
     57     p->n=y;
     58     if(e[x]==NULL)
     59     e[x]=p;
     60     else
     61     {
     62         p->next=e[x]->next;
     63         e[x]->next=p;
     64     }
     65 }
     66 
     67 void dfs(int x,int color)
     68 {
     69     if(vis[x])
     70     {
     71         if(vis[x]!=color+1)
     72         {
     73         puts("Impossible");
     74         exit(0);    
     75         }
     76         else
     77         return;
     78     }
     79     
     80     vis[x]=color+1;
     81     sum[color]++;
     82     for(node *i=e[x];i!=NULL;i=i->next)
     83     dfs(i->n,1-color);
     84 }
     85 
     86 int main()
     87 {
     88     in(n),in(m);
     89     For(i,1,m)
     90     {
     91         in(x),in(y);
     92         push(x,y);
     93         push(y,x);
     94     }
     95     For(i,1,n)
     96       if(!vis[i])
     97       {
     98         sum[0]=sum[1]=0;
     99         dfs(i,0);
    100         ans+=min(sum[0],sum[1]);    
    101       }
    102     o(ans);
    103      return 0;
    104 }
  • 相关阅读:
    Mac-安装Git以及Git的配置
    Mac 安装Maven,并设置环境变量
    Mac Tab自动补全键
    Eclipse 代码快捷键模板(一)
    网易博客迁移(2011-05-27)
    前端JS插件整理
    Ajax请求二进制流并在页面展示
    IDE中使用System.getProperty()获取一些属性
    Spring Boot:快速入门(二)
    c 语言 指针 与地址
  • 原文地址:https://www.cnblogs.com/war1111/p/7783308.html
Copyright © 2020-2023  润新知