1. 程式人生 > >二分圖——洛谷P2055 [ZJOI2009]假期的宿舍

二分圖——洛谷P2055 [ZJOI2009]假期的宿舍

#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"); } }