本文主要是介绍hdu1068(最大独立集),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接:点击打开链接
题意:给出n个人,给出n个人的关系,具体看样例(0: (3) 4 5 6代表编号为0的与编号为4,5,6的有关系)问一点关系没有的有几个人
代码:
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int s[505][505];
int fa[505],vis[505];
int dfs(int S){int i;for(i=0;i<n;i++){if(s[S][i]&&vis[i]==0){vis[i]=1;if(fa[i]==-1||dfs(fa[i])){fa[i]=S;return 1;}}}return 0;
}
int main(){ //题目直接要求求最大独立集int i,j,u,v,ans; //最大独立集=n-二分图最大匹配while(scanf("%d",&n)!=EOF){ //要注意一共就一个集合memset(s,0,sizeof(s));for(i=0;i<n;i++){scanf("%d: (%d) ",&u,&v);while(v--){scanf("%d",&u);s[i][u]=1;}}ans=0;memset(fa,-1,sizeof(fa));for(i=0;i<n;i++){memset(vis,0,sizeof(vis));if(dfs(i))ans++;}printf("%d\n",n-ans/2);}return 0;
}
这篇关于hdu1068(最大独立集)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!