博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1466 二分图最大独立集.cpp
阅读量:5160 次
发布时间:2019-06-13

本文共 1555 字,大约阅读时间需要 5 分钟。

题意:

给出了男女之间的暧昧关系..求解有多少人之间是没有暧昧关系的..

先给n表示有n个同学

然后 同学a:(暧昧关系人数m) 暧昧关系同学1 暧昧关系同学2 暧昧同学3 ... 

思路:

求出最大独立集..

 

Tips:

有向图:最大独立集 = n-最大匹配

无向图:最大独立集 = n-最大匹配/2

Code:

View Code
1 #include 
2 #include
3 #define clr(x) memset(x, 0, sizeof(x)) 4 const int INF = 0x1f1f1f1f; 5 6 struct Edge 7 { 8 int next; 9 int to;10 }edge[1000000];11 int tot;12 int head[510];13 14 void add(int s, int u)15 {16 edge[tot].to = u;17 edge[tot].next = head[s];18 head[s] = tot++;19 }20 21 int link[510];22 int vis[510];23 int sum, n;24 25 int dfs(int x)26 {27 for(int i = head[x]; i != -1; i = edge[i].next){28 int y = edge[i].to;29 if(!vis[y]){30 vis[y] = true;31 if(link[y] == 0 || dfs(link[y])){32 link[y] = x;33 return true;34 }35 }36 }37 return false;38 }39 40 void solve()41 {42 clr(link);43 sum = 0;44 for(int i = 0; i < n; ++i){45 clr(vis);46 if(dfs(i))47 sum++;48 }49 }50 51 int main()52 {53 int i, j, k;54 int a, b, m;55 while(scanf("%d", &n) != EOF)56 {57 memset(head, 0xff, sizeof(head));58 for(i = 0; i < n; ++i) {59 scanf("%d: (%d)", &a, &m);60 while(m--) {61 scanf("%d", &b);62 add(a, b);63 }64 }65 66 solve();67 68 printf("%d\n", n-sum/2);69 }70 return 0;71 }

 

 

转载于:https://www.cnblogs.com/Griselda/archive/2012/09/13/2682745.html

你可能感兴趣的文章
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
团队工作第二天
查看>>
System类
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
ObjectiveC基础教程(第2版)
查看>>
centos 引导盘
查看>>