您的位置:首页 > 其它

poj1469 COURSES 二分匹配模板水题

2015-03-17 17:53 253 查看
#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

const int maxn = 310;

int match[maxn];

int line[maxn][maxn];

int vis[maxn];

int N , P;

int find(int start)

{

for(int i = 1;i <= N;i++)

{

if(!vis[i]&&line[start][i])

{

vis[i] = 1;

if(match[i] == -1 || find(match[i]))

{

match[i] = start;

return 1;

}

}

}

return 0;

}

void Match()

{

memset(match, -1 , sizeof(match));

int ans=0;

for(int i = 1;i <= P;i++)

{

memset(vis,0,sizeof(vis));

if(find(i))

ans++;

}

if(ans == P)

printf("YES\n");

else

printf("NO\n");

}

int main()

{

int T;

scanf("%d", &T);

while(T--)

{

memset(line, 0 ,sizeof(line));

scanf("%d%d", &P, &N);

for(int i = 1;i <= P;i++)

{

int num;

scanf("%d", &num);

while(num--)

{

int v;

scanf("%d", &v);

line[i][v] = 1;

}

}

Match();

}

return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: