二分圖——洛谷P2055 [ZJOI2009]假期的宿舍
阿新 • • 發佈:2019-02-19
#include<bits/stdc++.h>
using namespace std;
const int N=55;
bool g[N][N],ok[N],vi[N],ans=0;
int link[N],a[N];
int n,m,x;
bool dfs(int x){
for(int i=1;i<=n;i++)
if(!vi[i]&&a[i]&&g[x][i]){
vi[i]=1;
if(!link[i]||dfs(link[i])){
link[i]=x;return 1;
}
}
return 0;
}
int main()
{
scanf("%d",&m);
while(m--){
memset(link,0,sizeof link);
memset(g,0,sizeof g);ans=0;
memset(ok,0,sizeof ok);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
scanf ("%d",&x);
if(a[i]==1&&x)ok[i]=1;else g[i][i]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%d",&x);
if(x&&a[j])g[i][j]=1;
}
for(int i=1;i<=n;i++)if(!ok[i]){
memset (vi,0,sizeof vi);
if(!dfs(i)){ans=1;break;}
}
if(ans)printf("T_T\n");else printf("^_^\n");
}
}