一不小心速度就成了#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 MB
Submit: 317  Solved: 178
[Submit][Status][Discuss]

Description

Input

Output

最多可选多少景点

Sample Input

7 6
1 2
2 3
5 4
4 3
3 6
6 7

Sample Output

2

HINT

Source

最新文章

  1. include、require、include_once和require_once理解
  2. jquery 选择器(name,属性,元素)大全
  3. oracle:ORACLE 实际返回的行数超出请求的行数
  4. Pyqt 屏幕截图工具
  5. ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多
  6. udp 内网穿透 互发消息
  7. 如何使用CREATE INDEX语句对表增加索引?
  8. 性能优化-查询最耗CPU的SESSION与SQL
  9. BIO,NIO,AIO的理解
  10. LinqToExcel: LINQ查询Excel电子表格
  11. leetcode面试准备:Simplify Path
  12. linux —— 启动引导程序 lilo 与 grub
  13. 【结构型】Composite模式
  14. CSS3 总结-2
  15. 大规模集群管理工具Borg
  16. C#笔记(一)常量
  17. java界面--WePush-master 项目跑起来 -碰到的问题
  18. Object.prototype的成员介绍
  19. mysql 实现树形的遍历
  20. SV class

热门文章

  1. 在数组中找几个数的和等于某个数[LeetCode]
  2. Servlet url-pattern优先级
  3. Sql日期时间格式转换 备用
  4. ISO/IEC14443和15693的对比有何具体区别
  5. RFID电子标签的二次注塑封装
  6. MVC模式已死
  7. java面试复习 I
  8. c++ enum用法【转】
  9. (转)内核线程对象--Event事件对象
  10. NGUI 按钮音效问题