题目大意:
从有向无环图中选出若干点不想交的链,使得这些链覆盖所有的点,并且链的条数最小。

思路:
设超级源点$S$、超级汇点$T$。
将$N$个点复制一份,分为$A$部和$B$部。
对于$A$部的所有点$A_i$,连一条从$S$到$A_i$的边;
对于$B$部的所有点$B_i$,连一条从$B_i$到$T$的边。
用最大流跑一边二分图匹配,得到的最大流F为每条链上入度为0的点的个数总和,而B部中未被匹配的点对应着每个链的头。
答案即为N-F。

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cctype>
  4. #include<vector>
  5. #include<cstring>
  6. inline int getint() {
  7. char ch;
  8. while(!isdigit(ch=getchar()));
  9. int x=ch^'';
  10. while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
  11. return x;
  12. }
  13. int s,t;
  14. const int E=,V=;
  15. struct Edge {
  16. int from,to;
  17. bool remain;
  18. };
  19. Edge e[E];
  20. std::vector<int> g[V];
  21. int sz=;
  22. inline void add_edge(const int u,const int v,const bool w) {
  23. e[sz]=(Edge){u,v,w};
  24. g[u].push_back(sz);
  25. sz++;
  26. }
  27. int p[V];
  28. bool a[V];
  29. inline bool Augment() {
  30. memset(a,,sizeof a);
  31. a[s]=true;
  32. std::queue<int> q;
  33. q.push(s);
  34. while(!q.empty()&&!a[t]) {
  35. int x=q.front();
  36. q.pop();
  37. for(unsigned i=;i<g[x].size();i++) {
  38. Edge &y=e[g[x][i]];
  39. if(!a[y.to]&&y.remain) {
  40. p[y.to]=g[x][i];
  41. a[y.to]=a[x]&&y.remain;
  42. q.push(y.to);
  43. }
  44. }
  45. }
  46. return a[t];
  47. }
  48. inline int EdmondsKarp() {
  49. int maxflow=;
  50. while(Augment()) {
  51. for(int i=t;i!=s;i=e[p[i]].from) {
  52. e[p[i]].remain^=true;
  53. e[p[i]^].remain^=true;
  54. }
  55. maxflow++;
  56. }
  57. return maxflow;
  58. }
  59. int main() {
  60. int n=getint(),m=getint();
  61. s=,t=n<<|;
  62. for(int i=;i<=n;i++) {
  63. add_edge(s,i,true);
  64. add_edge(i,s,false);
  65. add_edge(n+i,t,true);
  66. add_edge(t,n+i,false);
  67. }
  68. for(int i=;i<=m;i++) {
  69. int u=getint(),v=getint();
  70. add_edge(u,n+v,true);
  71. add_edge(n+v,u,false);
  72. }
  73. printf("%d\n",n-EdmondsKarp());
  74. return ;
  75. }

[HihoCoder1394]网络流四·最小路径覆盖的更多相关文章

  1. hihocoder #1394 : 网络流四·最小路径覆盖(最小路径覆盖)

    #1394 : 网络流四·最小路径覆盖 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 国庆期间正是旅游和游玩的高峰期. 小Hi和小Ho的学习小组为了研究课题,决定趁此机 ...

  2. hiho 第118周 网络流四·最小路径覆盖

    描述 国庆期间正是旅游和游玩的高峰期. 小Hi和小Ho的学习小组为了研究课题,决定趁此机会派出若干个调查团去沿途查看一下H市内各个景点的游客情况. H市一共有N个旅游景点(编号1..N),由M条单向游 ...

  3. hihoCoder 1394 : 网络流四·最小路径覆盖

    题目链接:https://hihocoder.com/problemset/problem/1394 题目说是网络流,但是其实就是求有向无环图的最小路径覆盖. 不会网络流,只好用二分匹配了. 把每个点 ...

  4. ●hihocoder #1394 网络流四·最小路径覆盖

    题链: http://hihocoder.com/problemset/problem/1394 题解: 有向图最小路径覆盖:最少的路径条数不重不漏的覆盖所有点. 注意到在任意一个最小路径覆盖的方案下 ...

  5. hihoCoder 网络流四·最小路径覆盖

    题面带解释 hihoCoder感觉很好. 网络流的精华就是建图 #include<cstdio> #include<iostream> #include<algorith ...

  6. 网络流二十四题之P2764 最小路径覆盖问题

    题目描述 给定有向图 G=(V,E)G=(V,E) .设 PP 是 GG 的一个简单路(顶点不相交)的集合.如果 VV 中每个定点恰好在PP的一条路上,则称 PP 是 GG 的一个路径覆盖.PP中路径 ...

  7. 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 ->最大二分匹配)

    [题意] 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交) 的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖. P 中路径可以从 V 的任何一 ...

  8. LOJ6002 - 「网络流 24 题」最小路径覆盖

    原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...

  9. LibreOJ 6003. 「网络流 24 题」魔术球 贪心或者最小路径覆盖

    6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 ...

随机推荐

  1. driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL) 【转】

    转自:http://blog.chinaunix.net/uid-23381466-id-3837650.html 内核版本:2.6.38-11-generic 内核自己都大量利用内核符号表导出函数, ...

  2. 一篇不错的CUDA入门

    鉴于自己的毕设需要使用GPU CUDA这项技术,想找一本入门的教材,选择了Jason Sanders等所著的书<CUDA By Example an Introduction to Genera ...

  3. OLAP和OLTP的区别(基础知识) 【转】

    联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则.OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 ( ...

  4. [USACO12DEC]逃跑的BarnRunning Away From…

    题意 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个 题解 似乎有好多种做法啊……然而蒟蒻只会打打主席树的板子…… 调了一个上午一直WA……狠下心来重打一遍居然直接一遍过 ...

  5. select 不要 用*

    背景 说实在的,这有什么好记录的呢.记录这个有啥用,真是技术人员的吹毛求疵.说起来,就是给人装有用吧.既然记录了,也想个相关的段子吧.曾经有个同事写了个sql,效率极差,来了个女同事,竟然解决了,问题 ...

  6. 解决vmware虚拟机克隆后启动centos报错device eth0 does not seem to be present, delaying initialization

    centos启动报错: device eth0 does not seem to be present, delaying initialization ifcfg-eth0的配置文件里保存了以前的M ...

  7. windows 7安装apache

    最近想在PHPEclipse 上开发PHP项目,但遇到的一个问题是:无法在Web 上浏览PHP页面,更谈不上调试了.这一点让人很是纠结,在浏览网上大量的相关内容后,该问题已经解决. 具体的操作过程详见 ...

  8. https协议的接口测试

    用jmeter测试https接口: 和传统的http协议套路不太一样. 注意细节: 1.取样器正常选择http请求,端口号:为443(具体根据接口文档我刚开始用的80端口所以错了) 2.请求方法,一定 ...

  9. 随机森林学习-2-sklearn

    # -*- coding: utf-8 -*- """ RandomForestClassifier skleran的9个模型在3份数据上的使用. 1. 知识点: skl ...

  10. Android开发之深入理解Android Studio构建文件build.gradle配置

    摘要: 每周一次,深入学习Android教程,TeachCourse今天带来的一篇关于Android Studio构建文件build.gradle的相关配置,重点学习几个方面的内容:1.applica ...