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

来源:互联网 发布:北京入职体检费用 知乎 编辑:程序博客网 时间:2024/05/17 14:24

https://www.luogu.org/problem/show?pid=2055
简单模型就是要睡觉的人连接可以睡觉的床;
然后大力匈牙利

#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");    }}
原创粉丝点击