二分匹配ZOJ3646

来源:互联网 发布:那英 知英情歌 编辑:程序博客网 时间:2024/05/22 07:41

//题意:类比线代里:把矩阵中的U看作【1】,是否满足一个满秩矩阵

//利用二分匹配就是
//每一行都有相对应的列;

 #include<iostream>#include<string.h>#include<set>#include<queue>#include<sstream>using namespace std;#define N 220char s[N][N];int ma[N][N];bool vis[N];int cx[N];int cy[N];int n;int findpath(int u){    for(int i=0;i<n;i++)    {        if(!vis[i]&&ma[u][i])        {            vis[i]=1;            if(cy[i]==-1||findpath(cy[i]))            {                cy[i]=u;                cx[u]=i;                return 1;            }        }     }    return 0;}int main(){    while(~scanf("%d",&n))    {        memset(ma,0,sizeof(ma));        for(int i=0;i<n;i++)        {            scanf("%s",s[i]);            for(int j=0;j<n;j++)            {                if(s[i][j]=='U')                    ma[i][j]=1;            }        }           int ans=0;        memset(cx,-1,sizeof(cx));        memset(cy,-1,sizeof(cy));        for(int i=0;i<n;i++)        {            if(cx[i]==-1)            {                memset(vis,0,sizeof(vis));                ans+=findpath(i);            }         }        if(ans==n)        {            printf("YES\n");        }        else        printf("NO\n");    }    return 0;}
0 0
原创粉丝点击