题意

给你张无环有向图,问至少多少条路径能够覆盖该图的所有顶点——并且,这些路径可以有交叉。

思路

不是裸的最小路径覆盖,正常的最小路径覆盖中两个人走的路径不能有重复的点,而本题可以重复。 当然我们仍可将问题转化为最小路径覆盖。如果一个人需要经过另一个人走过的点的时候,让他直接从该点上空飞过去,越过该点,直接走下一个点。如果我们赋予每个人这种能力,那么求得的无重复点的最小路径覆盖结果,就是题目要求的结果,因为需要重复的地方只要飞过去,就可以不重复了。赋予这个能力的方法就是预处理用Floyd求传递闭包把所有点能间接到达的点全都改为直接到达。然后正常求最小路径覆盖即可。

代码

[cpp] #include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <algorithm> #include <string> #include <cstring> #define MID(x,y) ((x+y)/2) #define MEM(a,b) memset(a,b,sizeof(a)) #define REP(i, begin, m) for (int i = begin; i < begin+m; i ++) using namespace std; const int MAXV = 1005; //|V1|+|V2| struct MaximumMatchingOfBipartiteGraph{ int vn; vector <int> adj[MAXV]; void init(int n){ //二分图两点集点的个数 vn = n; for (int i = 0; i <= vn; i ++) adj[i].clear(); } void add_uedge(int u, int v){ adj[u].push_back(v); adj[v].push_back(u); } bool vis[MAXV]; int mat[MAXV]; //记录已匹配点的对应点 bool cross_path(int u){ for (int i = 0; i < (int)adj[u].size(); i ++){ int v = adj[u][i]; if (!vis[v]){ vis[v] = true; if (mat[v] == 0 || cross_path(mat[v])){ mat[v] = u; mat[u] = v; return true; } } } return false; } int hungary(){ MEM(mat, 0); int match_num = 0; for (int i = 1; i <= vn; i ++){ MEM(vis, 0); if (!mat[i] && cross_path(i)){ match_num ++; } } return match_num; } void print_edge(){ for (int i = 1; i <= vn; i ++){ for (int j = 0; j < (int)adj[i].size(); j ++){ printf("u = %d v = %d\n", i, adj[i][j]); } } } }match; bool reach[MAXV>>1][MAXV>>1]; void floyd(int n){ REP(k, 1, n) REP(i, 1, n) REP(j, 1, n){ if (reach[i][j]) continue; reach[i][j] = reach[i][k] && reach[k][j]; } } int main(){ //freopen("test.in", "r", stdin); //freopen("test.out", "w", stdout); int n, m; while(scanf("%d %d", &n, &m), n+m){ if (0 == m){ printf("%d\n", n); continue; } MEM(reach, false); REP(i, 0, m){ int u, v; scanf("%d %d", &u, &v); reach[u][v] = true; } floyd(n); match.init(n); REP(i, 1, n) REP(j, 1, n){ if (reach[i][j]) match.add_uedge(i, j+n); } printf("%d\n", n-match.hungary()); } return 0; } [/cpp]

转载于:https://www.cnblogs.com/AbandonZHANG/p/4114295.html

POJ 2594 Treasure Exploration (可相交最小路径覆盖)相关推荐

  1. 玲珑学院OJ 1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月【强连通+可相交最小路径覆盖+背包】

    1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月 Time Limit:1s Memory Limit:256MByte Submissions:196Solved:23 DESCRIPTION ╳灬 ...

  2. CIA3 NOI接站(tarjan缩环+Floyd传递闭包+可相交最小路径覆盖)

    可以发现,题目求得就是一个可相交最小路径覆盖,但是有环.所以我们先用tarjan把环都缩掉,然后Floyd传递闭包,求二分图最大匹配,答案就是scc-ans. #include <cstdio& ...

  3. poj 2594 Treasure Exploration 最小路径覆盖

    题目链接:http://poj.org/problem?id=2594 建图很重要!!! 大致题意: 给出一个由n个顶点m条边组成的有向无环图.求最少可以同时存在多少路径,使得这些路径可以覆盖所有的点 ...

  4. POJ - 2594 Treasure Exploration(最小路径覆盖-二分图最大匹配+传递闭包)

    题目链接:点击查看 题目大意:给出一个有向图,现在需要让最少的机器人沿着图遍历所有点,求出最少需要机器人的数量,注意每个点可以重复遍历 题目分析:因为要遍历所有点,所以还是变成了二分图的最小路径覆盖问 ...

  5. poj 2594 Treasure Exploration

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 6284   Accepted: 2 ...

  6. POJ 3216 Repairing Company【二分图最小路径覆盖】

    题意: 告诉你 Q 格街区,一共有 M d 个任务分布在这Q 个街区里面,知道了每个任务的开始时间和需要一个人的完成时间,   问最少需要派多少人才能做完所有的任务. 分析: 求二分图的最小路径覆盖, ...

  7. 【POJ - 2594】Treasure Exploration(floyd传递闭包 + 最小路径覆盖,图论)

    题干: Have you ever read any book about treasure exploration? Have you ever see any film about treasur ...

  8. POJ Treasure Exploration 【DAG交叉最小路径覆盖】

    传送门:http://poj.org/problem?id=2594 Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K To ...

  9. POJ - 3020 Antenna Placement(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,图中'o'代表空地,'*'代表城市,现在需要给城市装无线网,每个无线网最多可以覆盖相邻的两个城市,问覆盖所有的城市最少需要装多少个无线网 题目分析: ...

最新文章

  1. sublime_text3代码自动提示补全
  2. 软考计算之运筹学-决策分析问题
  3. angularjs与PHP,我应该混合AngularJS与PHP框架吗?
  4. mysql中的乐观锁_MySQL中悲观锁和乐观锁到底是什么?
  5. 2021 ccpc 哈尔滨 G. Damaged Bicycle 状压 + 期望dp
  6. 【坑】Sketch算法——Count-Min Sketch和Universal Sketch
  7. nms python代码_?标检测中的?极?值抑制算法(nms):python代码解析
  8. 如何把一个运行完好的Kafka搞崩
  9. python 邻接矩阵_阿里巴巴举荐,Python视频,免费分享,用python求解特征向量和拉普拉斯矩阵...
  10. 针对2020年市面上短信供应商的对比(8家SMS供应商对比)
  11. VMware Workstation 14 Pro 安装 Windows Server 2008 R2(完)
  12. 【线性系统笔记2】系统框图与模拟结构图
  13. errors potentially fixable with the `--fix` option报错的解决
  14. 在excel中如何筛选重复数据_Excel如何快速筛选
  15. 关掉Win Server2003 IE增强的安全配置堵塞
  16. 在Excel中批量生成条形码,支持Code128、Code39、Jan13等等格式
  17. Augmented Reality Law, Privacy, and Ethics
  18. 发那科数控车ftp联网
  19. 金蝶云星空ERP附件上传接口开发思路
  20. 博客园美化教程大集合----极致个性化你的专属博客(超详细,看这篇就够了)...

热门文章

  1. visual studio code跳转到定义处插件
  2. Tomcat日志中文乱码问题解决
  3. OpenStack虚机网卡的创建过程
  4. sun.misc.BASE64Encoder在Eclipse中不能直接使用的原因和解决方案
  5. MongoDB9高可用的MongoDB集群
  6. AsyncTask工作机制简介
  7. Asp.Net Web API 2第一课——入门
  8. 三级下拉框连动的数据库版
  9. 再次修订后的版本。。。。。。1.0(发布版,射线求交三角形)
  10. 算法----------最长上升子序列(Java 版本)