題目大意:給出n個學生,給出每個學生都對誰有意思,然後問的是儘量多的配對的情況下,最多能剩幾個光棍(這裏剩幾個的意思是剩下的人加上每對陪過對的人抽出來一個人,因爲他們只對對方情有獨鍾,拉出來一個不管剩下的人的好壞都是不願意和他們配對的)
讀懂了題意,就可以知道這是個求最大獨立集數的題
題目鏈接:點擊打開鏈接
代碼註釋:
<span style="font-size:18px;color:#ff6600;"><strong>#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 505
int a[N][N],visit[N],link[N];
int n;
int dfs(int i)
{
for(int j=0; j<n; j++)//掃描每個妹子
{
if(a[i][j]&&!visit[j])//沒有相親成功
{
visit[j]=1;
if(link[j]==-1||dfs(link[j]))//沒有對象,或者找其他對象也能湊活,來給新來的哥們騰位置
{
link[j]=i;
return 1;
}
}
}
return 0;
}
int hungary()
{
int sum=0;
memset(link,-1,sizeof(link));
for(int i=0; i<n; i++)
{
memset(visit,0,sizeof(visit));
if(dfs(i))
sum++;
}
return sum;
}
int main()
{
int i;
while(cin>>n)
{
memset(a,0,sizeof(a));
for(i=0; i<n; i++)
{
int x,y,m;
scanf("%d: (%d)",&x,&m);
while(m--)
{
cin>>y;
a[x][y]=1;
}
}
cout<<n-hungary()/2<<endl; //套用公式即可
}
}</strong></span>
還不明白代碼意思的可以看我轉載的一個大神的博客,講解十分生動有趣!!令人印象深刻
關於二分其他問題可以看我其他博客