Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <iostream>
- #include <queue>
- #include <string>
- #include <vector>
- #include <cmath>
- #include <map>
- #include <stack>
- using namespace std;
- typedef unsigned ui;
- #define REP(i,a) for(int i=0;i<(a);i++)
- #define FOR(i,a,b) for(int i=(a);i<(b);i++)
- #define FORD(i,a,b) for(int i=(a);i>(b);i--)
- #define INF 1000000000
- int nextint()
- {
- int t;
- if(scanf("%d",&t)!=1) exit(0);
- return t;
- }
- char adj[19][19];
- int a[2][19][19];
- int sat[19];
- int used[19][2];
- int n;
- int cur;
- int dfs(int c,int par)
- {
- if(used[c][par^1]==1) return 0;
- if(used[c][par]) return 0;
- used[c][par]=1;
- if(c!=cur&&sat[c]==0)
- return 1;
- REP(i,n)
- if(a[par][c][i]&&dfs(i,par^1) )
- {
- sat[i]=1;
- a[par][c][i]=0;
- a[par][i][c]=0;
- a[1-par][c][i]=1;
- a[1-par][i][c]=1;
- return 1;
- }
- used[c][par]=2;
- return 0;
- }
- int main()
- {
- n=nextint();
- REP(i,n)
- scanf("%s",adj[i]);
- REP(i,n)
- REP(j,n)
- {
- a[0][i][j]=((adj[i][j]=='Y')?1:0);
- a[1][i][j]=0;
- }
- bool any=true;
- int res=0;
- while(any)
- {
- any=false;
- REP(i,n)
- {
- if(sat[i]==0)
- {
- memset(used,0,sizeof(used));
- cur=i;
- if(dfs(i,0))
- {
- any=true;
- sat[i]=1;
- res+=2;
- }
- }
- }
- }
- printf("%d\n",res);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment