题目链接
http://poj.org/problem?id=1469
解题思路
二分图匹配
提醒一下,cin好像TLE
AC代码
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int N=400;
vector<int> e[N];
int n,m,cnt,u,num,link[N],vis[N],T;
bool dfs(int x)
{
for(int i=0;i<e[x].size();i++)
{
int v=e[x][i];
if(vis[v]) continue;
vis[v]=1;
if(link[v]==0 || dfs(link[v]))
{
link[v]=x;
return 1;
}
}
return 0;
}
int main()
{
cin>>T;
while(T--)
{
scanf("%d%d",&n,&m);
memset(link,0,sizeof link);
for(int i=1;i<=n;i++) e[i].clear();
for(int i=1;i<=n;i++)
{
scanf("%d",&num);
while(num--) scanf("%d",&u),e[i].push_back(u);
}
int i;
for(i=1;i<=n;i++)
{
memset(vis,0,sizeof vis);
if(!dfs(i)) break;
}
if(i==n+1) puts("YES");
else puts("NO");
}
}
京公网安备 11010502036488号