ural 1129 (求数据)

先记下来。在test 7wa了。如果谁有数据希望可以指点下。thx.

  1 // File Name: 1129.cpp
  2 // Author: Missa
  3 // Created Time: 2013/3/12 星期二 17:31:53
  4 
  5 #include<iostream>
  6 #include<cstdio>
  7 #include<cstring>
  8 #include<algorithm>
  9 #include<cmath>
 10 #include<queue>
 11 #include<stack>
 12 #include<string>
 13 #include<vector>
 14 #include<cstdlib>
 15 #include<map>
 16 #include<set>
 17 using namespace std;
 18 #define CL(x,v) memset(x,v,sizeof(x));
 19 #define R(i,st,en) for(int i=st;i<en;i++)
 20 
 21 const int maxn = 1e2+5;
 22 bool g[maxn][maxn];
 23 bool gr[maxn][maxn];
 24 int deg[maxn];
 25 char ans[maxn][maxn];
 26 int n;
 27 void dfs(int x)
 28 {
 29     R(i,1,n+1)
 30     {
 31         if(g[x][i])
 32         {
 33             g[x][i]=g[i][x]=0;
 34             dfs(i);
 35             ans[x][i]='G';
 36             ans[i][x]='Y';
 37         }
 38     }
 39 }
 40 int main()
 41 {
 42     while(~scanf("%d",&n))
 43     { 
 44         CL(g,0);
 45         CL(deg,0);
 46         CL(ans,0);
 47         CL(gr,0);
 48         int x,v;
 49         R(i,1,n+1)
 50         {
 51             scanf("%d",&x);
 52             while(x--)
 53             {
 54                 scanf("%d",&v);
 55                 if(g[i][v]) continue;
 56                 g[i][v]=g[v][i]=1;
 57                 gr[i][v]=gr[v][i]=1;
 58                 deg[i]++;deg[v]++;
 59             }
 60         }
 61         vector<int>od;
 62         od.clear();
 63         R(i,1,n+1)
 64         {
 65             if(deg[i]&1)
 66                 od.push_back(i);
 67         }
 68         R(i,0,od.size())
 69         {
 70             int u=od[i];
 71             if(deg[u]&1==0) continue;
 72             R(j,i+1,od.size())
 73             {
 74                 int v=od[j];
 75                 if(deg[v]&1 && g[u][v]==0)
 76                 {
 77                     g[u][v]=g[v][u]=1;
 78                     deg[u]++;
 79                     deg[v]++;
 80                     break;
 81                 }
 82             }
 83         }
 84         R(i,1,n+1)
 85             if(deg[i]&1)
 86             {
 87                 dfs(i);
 88                 break;
 89             }
 90         R(i,1,n+1)
 91         {
 92             bool flag=0;
 93             R(j,1,n+1)
 94                 if(g[i][j])
 95                 {
 96                     flag=1;
 97                     break;
 98                 }
 99             if(flag)
100                 dfs(i);
101         }
102         R(i,1,n+1)
103         {
104             R(j,1,n+1)
105                 if(gr[i][j])
106                     printf("%c ",ans[i][j]);
107             printf("\n");
108         }
109     }
110     return 0;
111 }
原文地址:https://www.cnblogs.com/Missa/p/2956877.html