zoukankan      html  css  js  c++  java
  • (二分图染色)uva 11080 ——Place the Guards

    题目地址

    初学图……很水的二染色。注意每一个连通图都要选个数少的那种颜色,如果一个点单独作为连通图必须放1个士兵。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 #include <vector>
     6 using namespace std;
     7 int t;
     8 int v,e;//点数,边数
     9 vector <int> g[205];
    10 int x,y;
    11 int col[205];
    12 int cnt;
    13 bool flag;
    14 int ge;
    15 bool dfs(int v,int c)
    16 {
    17     col[v]=c;
    18     ge++;
    19     if(c==1)
    20         cnt++;
    21     for(int i=0;i<g[v].size();i++)
    22     {
    23         if(col[g[v][i]]==c)
    24             return false;
    25         if(col[g[v][i]]==-1)
    26         {
    27             if(!dfs(g[v][i],c^1))
    28                 return false;
    29         }
    30     }
    31     return true;
    32 }
    33 int an;
    34 int main()
    35 {
    36     scanf("%d",&t);
    37     while(t--)
    38     {
    39         an=0;
    40         flag=true;
    41         memset(col,-1,sizeof(col));
    42         scanf("%d %d",&v,&e);
    43         for(int i=0;i<v;i++)
    44             g[i].clear();
    45         for(int i=0;i<e;i++)
    46         {
    47             scanf("%d %d",&x,&y);
    48             g[x].push_back(y);g[y].push_back(x);
    49         }
    50         for(int i=0;i<v;i++)
    51         {
    52             if(col[i]==-1)
    53             {
    54                 cnt=0;
    55                 ge=0;
    56                 if(!dfs(i,1))
    57                 {
    58                     flag=false;
    59                     break;
    60                 }
    61                 else
    62                     {
    63                         if(ge!=1)
    64                             an+=min(cnt,ge-cnt);
    65                         else
    66                             an+=1;
    67                     }
    68             }
    69         }
    70         if(flag)
    71             printf("%d
    ",an);
    72         else
    73             printf("-1
    ");
    74     }
    75 }
  • 相关阅读:
    HDU
    HDU
    HDU
    Weights and Measures (贪心+dp)
    Weights and Measures (贪心+dp)
    HDU-1009-FatMouse' Trade(贪心)
    or2?Scum!(周期性求解)
    希希的多项式(推递推式)
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/quintessence/p/6543555.html
Copyright © 2011-2022 走看看