poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包
http://poj.org/problem?id=2594
太经典了,最小路径覆盖之变形!如果题目中有暗示此图无环且路径是单向的话,必然是最小路径覆盖无疑!
这个题的题目意思和那个伞兵题差不多,但是伞兵走过的路径是可以交叉的,这样我们先做一个传递闭包,然后再连边做最小路径覆盖即可。
Source Code
Problem: 2594 | User: 541780774 | |
Memory: 652K | Time: 1110MS | |
Language: G++ | Result: Accepted |
Source Code
#include<stdio.h> #include<stdlib.h> #include<string.h> int nx, ny; // X的點數目、Y的點數目 int mx[501], my[501]; // X各點的配對對象、Y各點的配對對象 bool vy[501]; // 紀錄Graph Traversal拜訪過的點 bool adj[501][501]; // 精簡過的adjacency matrix // 以DFS建立一棵交錯樹 bool DFS(int x) { for (int y=0; y<ny; ++y) if (adj[x][y] && !vy[y]) { vy[y] = true; // 找到擴充路徑 if (my[y] == -1 || DFS(my[y])) { mx[x] = y; my[y] = x; return true; } } return false; } int bipartite_matching() { // 全部的點初始化為未匹配點。 memset(mx, -1, sizeof(mx)); memset(my, -1, sizeof(my)); // 依序把X中的每一個點作為擴充路徑的端點, // 並嘗試尋找擴充路徑。 int c = 0; for (int x=0; x<nx; ++x) // if (mx[x] == -1) // x為未匹配點,這行可精簡。 { // 開始Graph Traversal memset(vy, false, sizeof(vy)); if (DFS(x)) c++; } return c; } void Floyd(int n) { int i,j,k; for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) { if(i!=j&&adj[i][k]&&adj[k][j]) adj[i][j]=1; } } main() { int i,a,b,n,m; while(scanf("%d%d",&n,&m),n!=0||m!=0) { memset(adj, 0, sizeof(adj)); for(i=0;i<m;i++) { scanf("%d%d",&a,&b); adj[a-1][b-1]=1; } Floyd(n); nx=ny=n; printf("%d\n",n-bipartite_matching()); } system("pause"); }
转载于:https://www.cnblogs.com/zxj015/archive/2011/02/12/2740287.html
poj2594 Treasure Exploration 二分匹配之最小路径覆盖+传递闭包相关推荐
- POJ Treasure Exploration 【DAG交叉最小路径覆盖】
传送门:http://poj.org/problem?id=2594 Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K To ...
- POJ2594 Treasure Exploration[DAG的最小可相交路径覆盖]
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8301 Accepted: 3 ...
- 【POJ - 2594】Treasure Exploration(floyd传递闭包 + 最小路径覆盖,图论)
题干: Have you ever read any book about treasure exploration? Have you ever see any film about treasur ...
- 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 -最大二分匹配)...
[题意] 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交) 的集合.如果 V 中每个 顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖. P 中路径可以从 V 的任何 ...
- POJ 2594 Treasure Exploration (可相交最小路径覆盖)
题意 给你张无环有向图,问至少多少条路径能够覆盖该图的所有顶点--并且,这些路径可以有交叉. 思路 不是裸的最小路径覆盖,正常的最小路径覆盖中两个人走的路径不能有重复的点,而本题可以重复. 当然我们仍 ...
- POJ - 2594 Treasure Exploration(最小路径覆盖-二分图最大匹配+传递闭包)
题目链接:点击查看 题目大意:给出一个有向图,现在需要让最少的机器人沿着图遍历所有点,求出最少需要机器人的数量,注意每个点可以重复遍历 题目分析:因为要遍历所有点,所以还是变成了二分图的最小路径覆盖问 ...
- poj 2594 Treasure Exploration 最小路径覆盖
题目链接:http://poj.org/problem?id=2594 建图很重要!!! 大致题意: 给出一个由n个顶点m条边组成的有向无环图.求最少可以同时存在多少路径,使得这些路径可以覆盖所有的点 ...
- POJ2594 Treasure Exploration
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8879 Accepted: 3 ...
- poj2594(二分图,最小路径覆盖变形)
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 7611 Accepted: 3 ...
- POJ--2594|Treasure Exploration
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8223 Accepted: 3 ...
最新文章
- AI换脸鉴别率超99.6%,微软用技术应对虚假信息
- 编程之美-连连看游戏设计方法整理
- good things will come late
- Node js redis
- Spring中,使用工具类无法自动注入service
- d.php xfso_centos平台基于snort、barnyard2以及base的IDS(入侵检测系统)的搭建与测试及所遇问题汇总...
- 如何在网中使用百度地图API自定义个性化地图
- 一个方便的颜色主题组件
- php函数trim(),php trim函数怎么用?
- 只会编程的程序员没有前途
- (详细带你分析错误):No property 属性名 found for type 类名,总结了其他解决办法
- 八大数据结构及常见面试题
- 成手指状态html,css手势状态定义属性cursor和自定义鼠标手势详解
- python判断文字是否是中文
- 安卓应用移植鸿蒙(五):发布鸿蒙自定义组件(har包)到MavenCenter全过程,采坑无数
- java阿波罗入门介绍_十分钟入门Apollo
- WMS仓储管理系统在各种行业中,都有哪些作用
- ckfinder 2.3 破解
- QQ空间JS代码原理
- 【Java笔记+踩坑】SpringBoot基础2——运维实用
热门文章
- 给LINUX添加一个开机执行脚本
- css横向排列_前端初学者李不白,html+css的角度,带你分析蘑菇街官网!!!
- php getelement,javascript getElementByTagName的使用_javascript技巧
- c++ 文件操作方式
- java 人脸识别 demo_基于虹软sdk,java实现人脸识别(demo)
- python可以500x1000_Python练习题 一. 使用匿名函数对1~1000求和,代码力求简洁。...
- java switch 条件_Java 条件之 switch 语句
- 三朵云 华为_【创业前沿】华为突然传来大消息!对不起,我要辞职了!
- Rabbitmq 延迟队列
- 【iOS-iap防护】验证用户付费收据!拒绝iap Cracker!!