HDU 1068 boys and girls(最大独立集)
思路:先求最大匹配数cnt,结果为最大独立集的对数:(2*n-cnt)/2 对. (题目保证对数为奇数)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <stack>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
using namespace std;
#define LL long long
#define M 210
#define DEBUG puts("It's here!")
#define INF 1<<29
#define CLS(x,v) memset(x,v,sizeof(x))
#define FOR(i,a,n) for(int i=(a);i<(n);++i)
int link[M],vis[M];
int graph[M][M];
int n;
int DFS(int x)
{
for(int i=0; i<n; i++)
if(!vis[i]&&graph[x][i])
{
vis[i]=1;
if(link[i]==-1||DFS(link[i]))
{
link[i]=x;
return 1;
}
}
return 0;
}
int main()
{
int a,b,k;
while(~scanf("%d",&n))
{
CLS(graph,0);
for(int i=0;i<n;i++){
scanf("%d: ",&a);
scanf("(%d)",&k);
for(int j=0;j<k;j++)
{
scanf("%d",&b);
graph[a][b]=1;
}
}
CLS(link,-1);
int cnt=0;
for(int i=0; i<n; i++)
{
CLS(vis,0);
if(DFS(i))cnt++;
}
printf("%d\n",n-cnt/2);
}
return 0;
}

本文介绍了解决HDU1068问题的算法思路,该问题是关于最大独立集的计算。首先通过求解最大匹配数,进而得到最大独立集的对数,最终实现对奇数对的最大独立集问题的解决。
&spm=1001.2101.3001.5002&articleId=38367727&d=1&t=3&u=137ed9a9c13549cc9c5a6740bdb130f7)
1003

被折叠的 条评论
为什么被折叠?



