BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )
2015-10-03 15:31
288 查看
![](http://images2015.cnblogs.com/blog/723896/201510/723896-20151003152243527-1491902417.png)
一不小心速度就成了#1....
这道题显然是求最长反链, 最长反链=最小链覆盖.最小链覆盖就是先做一次floyd传递闭包, 再求最小路径覆盖. 最小路径覆盖=N - 二分图最大匹配. 所以把所有点拆成x,y两个, 然后存在edge(u,v)就连ux->vy. 然后跑匈牙利即可.
------------------------------------------------------------------
#include<bits/stdc++.h> using namespace std; const int maxn = 209; inline int read() { char c = getchar(); int ret = 0; for(; !isdigit(c); c = getchar()); for(; isdigit(c); c = getchar()) ret = ret * 10 + c - '0'; return ret;} struct edge { int to; edge* next;} E[maxn * maxn], *pt = E, *head[maxn]; inline void addedge(int u, int v) { pt->to = v; pt->next = head[u]; head[u] = pt++;} bitset<maxn> d[maxn];int vis[maxn], match[maxn], N, C; bool dfs(int x) { for(edge* e = head[x]; e; e = e->next) if(vis[e->to] != C) { vis[e->to] = C; if(!~match[e->to] || dfs(match[e->to])) { match[e->to] = x; return true; } } return false;} int main() { memset(match, -1, sizeof match); memset(vis, -1, sizeof vis); N = read(); int m = read(); for(int i = 0; i < N; i++) d[i].reset(); while(m--) d[read() - 1][read() - 1] = 1; for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) if(d[j][i]) d[j] |= d[i]; for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) if(d[i][j]) addedge(i, j); int ans = N; for(C = 0; C < N; C++) if(dfs(C)) ans--; printf("%d\n", ans); return 0;}------------------------------------------------------------------
2718: [Violet 4]毕业旅行
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 317 Solved: 178
[Submit][Status][Discuss]
Description
![](http://www.lydsy.com/JudgeOnline/upload/201204/T2des(4).gif)
Input
![](http://www.lydsy.com/JudgeOnline/upload/201204/T2input(4).gif)
Output
最多可选多少景点Sample Input
7 61 2
2 3
5 4
4 3
3 6
6 7
Sample Output
2HINT
![](http://www.lydsy.com/JudgeOnline/upload/201204/T2hint(3).gif)
Source
Ctsc2008 River & ural 1533. Fat Hobbits相关文章推荐
- JPA主键生成策略
- 【Python之旅】第五篇(一):Python Socket通信原理
- 【Python之旅】第五篇(一):Python Socket通信原理
- 自我毁灭的8个大坑(深度好文!)
- 翻转线性表中的元素
- HDU 1815, POJ 2749 Building roads(2-sat)
- ubuntu下搭建svn服务器
- 第一行代码笔记6(Fragment)
- 11-v4l2驱动——filed
- poj2142
- 1103 host is not allowed to connect to this mysql server
- Java 用hashmap统计词频
- poj2142
- POJ 1469 COURSES(二分图匹配)
- Best Time to Buy and Sell Stock IV
- php __set() __get() 方法访问属性
- ListView与ViewPager组合(一)
- linux 技巧:使用 screen 管理你的远程会话http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
- spring boot实战(第六篇)加载application资源文件源码分析
- 随笔分类 - 无废话ExtJs系列教程