http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=137

http://poj.org/problem?id=1466

题目大意:

n个学生,他们中有的有关系,有的没有关系,求最多可以取出几个人,使得他们之间没有关系。

思路:

复制别人的。。。。。

最大独立集问题:在N个点的图G中选出m个点,使这m个点两两之间没有边.求m最大值.如果图G满足二分图条件,则可以用二分图匹配来做.最大独立集点数 = N - 最大匹配数/2,然后就是匈牙利算法实现了。

#include<cstdio>
#include<cstring>
const int MAXN=500+10;
int res[MAXN],head[MAXN],len;
bool vis[MAXN];
struct edge
{
int to,next;
}e[MAXN*MAXN]; void add(int from,int to)
{
e[len].to=to;
e[len].next=head[from];
head[from]=len++;
} bool find(int a)
{
for(int i=head[a];i!=-1;i=e[i].next)
{
int id=e[i].to;
if(!vis[id])
{
vis[id]=true;
if(res[id]==0 || find(res[id]) )
{
res[id]=a;
return true;
}
}
}
return false;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(res,0,sizeof(res));
memset(head,-1,sizeof(head));
len=0; for(int i=0;i<n;i++)
{
int x,cnt;
scanf("%d: (%d)",&x,&cnt);
for(int j=0;j<cnt;j++)
{
int to;
scanf("%d",&to);
add(x,to);
}
}
int ans=0;
for(int i=0;i<n;i++)
{
memset(vis,0,sizeof(vis));
if(find(i)) ans++;
}
printf("%d\n",n-ans/2);
}
}

最新文章

  1. React在开发中的常用结构以及功能详解
  2. How to write perfect C code
  3. php5.6 一键编译
  4. 折腾Ubuntu下的android studio
  5. 利用MySQL存储过程分割字符串
  6. IOS 7 UI 的适配
  7. Webscan360的防御与绕过
  8. Spark菜鸟学习营Day3 RDD编程进阶
  9. Python基础复习_Unit one
  10. HDU 3289 Cat VS Dog (二分匹配 求 最大独立集)
  11. JSP Servlet SQL 三者之间数据传递
  12. VS2013 快捷键乱掉如何修改回来
  13. ASP.NET Core轻松入门之Middleware管道模型
  14. PMP应考知识点-合同类型以及选择要领
  15. ElasticSearch query_string vs multi_match cross_fields query
  16. 深入理解JVM(1)——栈和局部变量操作指令
  17. react-router-dom v^4路由、带参路由的配置
  18. .net ML机器学习中遇见错误记录
  19. PC端和移动APP端CSS样式初始化
  20. ASP.NET Core 释放 IDisposable 对象的四种方法

热门文章

  1. HDOJ 4460 Friend Chains 图的最长路
  2. android图像处理(3) 底片效果
  3. HDU 6182 A Math
  4. Codefroces Educational Round 26 837 D. Round Subset
  5. uname 命令
  6. Laravel输出sql语句
  7. [React] Create a queue of Ajax requests with redux-observable and group the results.
  8. MySQL具体解释(13)------------事务
  9. ajax同时请求多个服务器?
  10. ubuntu-smb共享文件创建