题意:n件物品,有m个问题,回答第i个问题需要用到物品编号a[i]或者b[i]其中一个.
n,m<=1e3,每个物品最多用一次,问最多能回答多少个问题?
n,m<=1e3,每个物品最多用一次,问最多能回答多少个问题?
左边定点为问题 右边为物品 问题向物品连边,跑二分图的最大匹配即可. 小坑,一题回答完才能进入下一题.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e3+5;
int n,m,x,a[N][N],vis[N],mk[N];
bool find(int x)
{
for(int i=0;i<n;i++)
{
if(a[x][i]&&!vis[i])
{
vis[i]=1;
if(!mk[i]||find(mk[i]))
{
mk[i]=x;
return true;
}
}
}
return false;
}
void calc()
{
int ans=0;
for(int i=1;i<=m;i++)
{
memset(vis,0,sizeof(vis));
if(find(i))
ans++;
else
break;
}
cout<<ans<<endl;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=2;j++)
{
scanf("%d",&x);
a[i][x]=1;
}
}
calc();
return 0;
}