knightL

SMTH

Feb 15th, 2012
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <queue>
  6. #include <string>
  7. #include <vector>
  8. #include <cmath>
  9. #include <map>
  10. #include <stack>
  11. using namespace std;
  12.  
  13. typedef unsigned ui;
  14. #define REP(i,a) for(int i=0;i<(a);i++)
  15. #define FOR(i,a,b) for(int i=(a);i<(b);i++)
  16. #define FORD(i,a,b) for(int i=(a);i>(b);i--)
  17. #define INF 1000000000
  18. int nextint()
  19. {
  20.    int t;
  21.    if(scanf("%d",&t)!=1) exit(0);
  22.    return t;
  23. }
  24.  
  25. char adj[19][19];
  26. int a[2][19][19];
  27. int sat[19];
  28. int used[19][2];
  29. int n;
  30. int cur;
  31.  
  32. int dfs(int c,int par)
  33. {
  34.    if(used[c][par^1]==1) return 0;
  35.    if(used[c][par]) return 0;
  36.    used[c][par]=1;
  37.    if(c!=cur&&sat[c]==0)
  38.        return 1;
  39.    REP(i,n)
  40.        if(a[par][c][i]&&dfs(i,par^1) )
  41.        {
  42.            sat[i]=1;
  43.            a[par][c][i]=0;
  44.            a[par][i][c]=0;
  45.            a[1-par][c][i]=1;
  46.            a[1-par][i][c]=1;
  47.            return 1;
  48.        }
  49.    used[c][par]=2;
  50.    return 0;
  51. }
  52.  
  53. int main()
  54. {
  55.    n=nextint();
  56.    REP(i,n)
  57.        scanf("%s",adj[i]);
  58.    REP(i,n)
  59.        REP(j,n)
  60.        {
  61.            a[0][i][j]=((adj[i][j]=='Y')?1:0);
  62.            a[1][i][j]=0;
  63.        }
  64.    bool any=true;
  65.    int res=0;
  66.    while(any)
  67.    {
  68.        any=false;
  69.        REP(i,n)
  70.        {
  71.            if(sat[i]==0)
  72.            {
  73.                memset(used,0,sizeof(used));
  74.                cur=i;
  75.                if(dfs(i,0))
  76.                {
  77.                    any=true;
  78.                    sat[i]=1;
  79.                    res+=2;
  80.                }
  81.            }
  82.        }
  83.    }
  84.    printf("%d\n",res);
  85.    return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment