hdu 1068 poj 1466 最大独立集
2015-07-24 22:58
399 查看
题意:
给出一些大学二年级男男女女之间的关系,找出没有缘分的同学的最多的个数。
大二病也要谈恋爱- -
解析:
二分图找最大独立集,因为题目给出的是双向的图,所以匈牙利最后得出的最大匹配要除以2.
然后用点数-这个数就是答案了。
代码:
给出一些大学二年级男男女女之间的关系,找出没有缘分的同学的最多的个数。
大二病也要谈恋爱- -
解析:
二分图找最大独立集,因为题目给出的是双向的图,所以匈牙利最后得出的最大匹配要除以2.
然后用点数-这个数就是答案了。
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #include <cmath> #include <stack> #include <vector> #include <queue> #include <map> #include <set> #include <climits> #include <cassert> #define LL long long using namespace std; const int inf = 0x3f3f3f3f; const int maxn = 1000 + 10; const double eps = 1e-8; const double pi = acos(-1.0); const double ee = exp(1.0); vector<int> g[maxn]; int fr[maxn]; bool vis[maxn]; int n, m; bool match(int v) { for (int i = 0; i < g[v].size(); i++) { int u = g[v][i]; if (!vis[u]) { vis[u] = true; if (fr[u] == -1 || match(fr[u])) { fr[u] = v; return true; } } } return false; } int hungary() { int ret = 0; memset(fr, -1, sizeof(fr)); for (int i = 0; i < n; i++) { memset(vis, false, sizeof(vis)); if (match(i)) { ret++; } } return ret; } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAl while (~scanf("%d", &n) && n) { for (int i = 0; i < n; i++) { g[i].clear(); } for (int i = 0; i < n; i++) { int fr, k; scanf("%d: (%d)", &fr, &k); while (k--) { int to; scanf("%d", &to); g[fr].push_back(to); } } printf("%d\n", n - (hungary() >> 1)); } return 0; }
相关文章推荐
- 数据结构链表——双链表
- Struts2学习记录-Value Stack(值栈)和OGNL表达式
- 从唯一实例谈静态成员
- 数字反转(升级版)
- 2015.7.24 改正后的稍简陋通讯录
- gadget编码与单元测试和service编写示例
- 计数排序、桶排序和基数排序
- java 之CPU~CPU缓存(转)
- bzoj2654
- java 选择排序
- 最新期货交易时间表
- You must supply a layout_width attribute.解决办法
- [整理] 安装完 Ubuntu 15.04 后要做的几件事
- DirectUI界面编程(四)界面布局详解
- DirectUI界面编程(四)界面布局详解
- 我的cocos2之旅 第一天(环境的安装以及Hello World)
- 黑马程序员--面向对象01
- Font Awesome 字体的以及 图标的使用总结
- DirectUI界面编程(四)界面布局详解
- 性能调优利器之strace