2718: [Violet 4]毕业旅行

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 672  Solved: 389
[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

 
   首先有一个结论是:最长反链大小 = 最小路径覆盖数。
    这个具体证明我也不太会,只知道首先 最长反链肯定 <= 最小路径覆盖 (考虑反链的定义),然后再xxxx就出来了(逃
    最小路径覆盖就是经典网络流问题了2333 (有一个叫 组合数学 的题貌似就是这个道理)
 
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define pb push_back
  4. using namespace std;
  5. const int maxn=505;
  6. vector<int> g[maxn];
  7. struct lines{
  8. int to,flow,cap;
  9. }l[maxn*maxn];
  10. int t=-1,S,T,d[maxn],cur[maxn];
  11. bool v[maxn];
  12.  
  13. inline void add(int from,int to,int cap){
  14. l[++t]=(lines){to,0,cap},g[from].pb(t);
  15. l[++t]=(lines){from,0,0},g[to].pb(t);
  16. }
  17.  
  18. inline bool BFS(){
  19. queue<int> q;
  20. memset(v,0,sizeof(v));
  21. q.push(S),v[S]=1,d[S]=0;
  22. int x; lines e;
  23.  
  24. while(!q.empty()){
  25. x=q.front(),q.pop();
  26. for(int i=g[x].size()-1;i>=0;i--){
  27. e=l[g[x][i]];
  28. if(e.flow<e.cap&&!v[e.to]){
  29. v[e.to]=1,d[e.to]=d[x]+1;
  30. q.push(e.to);
  31. }
  32. }
  33. }
  34. return v[T];
  35. }
  36.  
  37. int dfs(int x,int A){
  38. if(x==T||!A) return A;
  39. int flow=0,f,sz=g[x].size();
  40. for(int &i=cur[x];i<sz;i++){
  41. lines &e=l[g[x][i]];
  42. if(d[x]==d[e.to]-1&&(f=dfs(e.to,min(e.cap-e.flow,A)))){
  43. A-=f,flow+=f;
  44. e.flow+=f,l[g[x][i]^1].flow-=f;
  45. if(!A) break;
  46. }
  47. }
  48. return flow;
  49. }
  50.  
  51. inline int max_flow(){
  52. int an=0;
  53. while(BFS()){
  54. memset(cur,0,sizeof(cur));
  55. an+=dfs(S,1<<30);
  56. }
  57. return an;
  58. }
  59.  
  60. int n,m,uu,vv;
  61. bool G[205][205];
  62.  
  63. inline void build(){
  64. for(int k=1;k<=n;k++)
  65. for(int i=1;i<=n;i++)
  66. for(int j=1;j<=n;j++) if(G[i][k]&&G[k][j]) G[i][j]=1;
  67. S=0,T=n*2+1;
  68. for(int i=1;i<=n;i++) add(S,i,1),add(i+n,T,1);
  69. for(int i=1;i<=n;i++)
  70. for(int j=1;j<=n;j++) if(G[i][j]) add(i,j+n,1);
  71. }
  72.  
  73. int main(){
  74. scanf("%d%d",&n,&m);
  75. for(int i=1;i<=m;i++) scanf("%d%d",&uu,&vv),G[uu][vv]=1;
  76. build(),printf("%d\n",n-max_flow());
  77. return 0;
  78. }

  

[Violet 4] 毕业旅行的更多相关文章

  1. BZOJ2718: [Violet 4]毕业旅行

    2718: [Violet 4]毕业旅行 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 229  Solved: 126[Submit][Status ...

  2. BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )

    一不小心速度就成了#1.... 这道题显然是求最长反链, 最长反链=最小链覆盖.最小链覆盖就是先做一次floyd传递闭包, 再求最小路径覆盖. 最小路径覆盖=N - 二分图最大匹配. 所以把所有点拆成 ...

  3. Bzoj 2718: [Violet 4]毕业旅行 && Bzoj 1143: [CTSC2008]祭祀river 传递闭包,二分图匹配,匈牙利,bitset

    1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1878  Solved: 937[Submit][St ...

  4. bzoj 1143: [CTSC2008]祭祀river / 2718: [Violet 4]毕业旅行 -- 二分图匹配

    1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MB Description 在遥远的东方,有一个神秘的民族,自称Y族.他们 ...

  5. bzoj1143: [CTSC2008]祭祀river && bzoj27182718: [Violet 4]毕业旅行

    其实我至今不懂为啥强联通缩点判入度会错... 然后这个求的和之前那道组合数学一样,就是最长反链=最小链覆盖=最大独立集. #include<cstdio> #include<iost ...

  6. BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)

    蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...

  7. 2016级算法期末模拟练习赛-A.wuli51和京导的毕业旅行

    1063 wuli51和京导的毕业旅行 思路 中等题,二分+贪心. 简化题意,将m+1个数字分成n份,ans为这n段中每段数字和的最大值,求ans最小值及其方案. 对于这种求最小的最大值,最常用的方法 ...

  8. Python笔试——毕业旅行问题

    毕业旅行问题 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的 ...

  9. luogu P5606 小 K 与毕业旅行 - 构造 - 多项式

    题目传送门 传送门 先考虑 $a_i > 0$ 的情况.考虑构造这样一个顺序:$a_i$ 要么和后面的数的乘积都大于 $w$ 要么都小于等于 $w$. 这个构造可以这样做: vector< ...

随机推荐

  1. python爬虫基础13-selenium大全7/8-异常

    Selenium笔记(7)异常 本文集链接:https://www.jianshu.com/nb/25338984 完整文档 Exceptions that may happen in all the ...

  2. crm项目之整体内容(一)

    一.项目背景 YW公司是一家电池供应商,目前由于公司内部的需要,需要做一个CRM项目,需要每一个不同角色的员工登陆系统后处理自己的事情.其流程大致如下: 其项目包括三部分内容: 1.权限分配组件(rb ...

  3. drf 解析器,响应器,路由控制

    解析器 作用: 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有application/json,x-www-form-urlencoded,form-data等格式 ...

  4. python2和python3,字典和json

    Python2的标准数据类型有: Numbers (数字) String (字符串) List (列表) Tuple (元组) Dictionary (字典) Python3的标准数据类型有: Num ...

  5. CentOS 7.X 中systemctl命令用法详解

    systemctl是RHEL 7 的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体.可以使用它永久性或只在当前会话中启用/禁用服务,下面来看CentOS 7.X 中 ...

  6. MIP启发式算法:Variable fixing heuristic

    *本文主要记录及分享学习到的知识,算不上原创 *参考文章见链接. 本文简单介绍一下Variable fixing heuristic,这个算法同样以local search为核心框架,它的特点在于定义 ...

  7. POJ-3278 广度优先搜索入门

    #include<stdio.h> #include<stdlib.h> struct node{ int x; int s; }s[]; int main(){ ]={}; ...

  8. 反转单词顺序 VS 左旋转字符串

    题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标垫符号和普通字母一样处理.例如输入字符串“I am a student.”,则输出“student. a am I ...

  9. 关于ios 和 android 录音(语音)对聊文件格式问题

    关于ios 和 android 录音(语音)对聊文件格式问题 在做语音对讲的时候,将会碰到录制语音格式的问题,这些需要跨平台我们可能需要使用双方平台都支持的格式,或者执行编码转换 解决方式如下: wa ...

  10. day04_01 知识回顾、算术运算符

    ","和"+"的区别 除法运算,整除//,别名"地板除" 取余数 2**10 2的10次方 指数运算 指数运算符优先级要比乘法要高,所以先算 ...