POJ2594 Treasure Exploration[DAG的最小可相交路径覆盖]
| Time Limit: 6000MS | Memory Limit: 65536K | |
| Total Submissions: 8301 | Accepted: 3402 |
Description
Recently, a company named EUC (Exploring the Unknown Company) plan to explore an unknown place on Mars, which is considered full of treasure. For fast development of technology and bad environment for human beings, EUC sends some robots to explore the treasure.
To make it easy, we use a graph, which is formed by N points (these N points are numbered from 1 to N), to represent the places to be explored. And some points are connected by one-way road, which means that, through the road, a robot can only move from one end to the other end, but cannot move back. For some unknown reasons, there is no circle in this graph. The robots can be sent to any point from Earth by rockets. After landing, the robot can visit some points through the roads, and it can choose some points, which are on its roads, to explore. You should notice that the roads of two different robots may contain some same point.
For financial reason, EUC wants to use minimal number of robots to explore all the points on Mars.
As an ICPCer, who has excellent programming skill, can your help EUC?
Input
Output
Sample Input
1 0
2 1
1 2
2 0
0 0
Sample Output
1
1
2
Source
Problem : Treasure Exploration
Description : 机器人探索宝藏,有N个点,M条边。问你要几个机器人才能遍历所有的点。
Solution : 二分图的最小路径覆盖。这个题看来好像就是裸的最小路径覆盖,但是题中说了一个点可以遍历多次,这和最小路径覆盖中路径之间不能有交点是矛盾的。那么怎么办呢,我们跑一遍floyd算法,来求出它的传递闭包,这样就可以构造一个新的图了。为什么可以这样呢,因为这样可以新增加边,使得原来路径不能共用同一个点的问题解决了,画个图就明白了。
如果不跑Floyd,那么最小路径覆盖数就是3,{[1->2->3],[4],[5]};跑一下传递闭包,就新增了两条边,如图中虚线所示,这时候4和5这两个点就可以直接连接了,因为[1->2->3]变成了[1->3]给[4->5]让开了一条路。因此以后如果不要求一个点只能走一次,那么就要跑floyd算法。
——摘自网络
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
int n,m,match[N],f[N][N];
bool vis[N];
void init(){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
f[i][j]=;
}
}
for(int i=;i<=n;i++) match[i]=;
}
bool hunguary(int x){
for(int i=;i<=n;i++){
if(!vis[i]&&f[x][i]){
vis[i]=;
if(!match[i]||hunguary(match[i])){
match[i]=x;
return ;
}
}
}
return ;
}
void floyed(){
for(int k=;k<=n;k++){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(f[i][k]&&f[k][j]){
f[i][j]=;
}
}
}
}
}
void solve(){
int ans=;
for(int i=;i<=n;i++){
memset(vis,,sizeof vis);
if(hunguary(i)) ans++;
}
printf("%d\n",n-ans);
}
int main(){
while(scanf("%d%d",&n,&m)==,n+m){
init();
for(int i=,x,y;i<=m;i++) scanf("%d%d",&x,&y),f[x][y]=;
floyed();
solve();
}
return ;
}
POJ2594 Treasure Exploration[DAG的最小可相交路径覆盖]的更多相关文章
- POJ 2594 Treasure Exploration 最小可相交路径覆盖
最小路径覆盖 DAG的最小可相交路径覆盖: 算法:先用floyd求出原图的传递闭包,即如果a到b有路径,那么就加边a->b.然后就转化成了最小不相交路径覆盖问题. 这里解释一下floyd的作用如 ...
- POJ 2594 Treasure Exploration(最小可相交路径覆盖)题解
题意:有n个点,m条单向边,每个机器人能沿着单向边走,能重复经过一个点,问最少几个机器人走遍n个点 思路:原来以前学的都是不能相交的算法....可相交的做法是跑Floyd把能到达的都加上边,然后跑最小 ...
- 【BZOJ3691】游行 最小可相交路径覆盖转化
因为C是不断变化的而且C是和点权相关和边权无关 所以我们可以MCMF但是MCMF的时候不能与C相关 再分析问题 我们可以认为每条路径S->T只覆盖T这个终点 因为题目中说了如果Si != Ti ...
- FJUT3591 侦测到在途的聚变打击(最小不可相交路径覆盖)题解
题意:给你n个点,点间m条路,给出在每条路要走的时间.现在有q个任务,要摧毁q个点,每次提供ci和ti表示在时间ti摧毁点ci(必须正好在时间ti才能摧毁),每个点可能需要多次摧毁(同一时间能在同一个 ...
- POJ2594 Treasure Exploration【DAG有向图可相交的最小路径覆盖】
题目链接:http://poj.org/problem?id=2594 Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K T ...
- POJ2594 Treasure Exploration(最小路径覆盖)
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8550 Accepted: 3 ...
- POJ2594 Treasure Exploration
Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8193 Accepted: 3358 Description Have ...
- POJ-2594 Treasure Exploration,floyd+最小路径覆盖!
Treasure Exploration 复见此题,时隔久远,已忘,悲矣! 题意:用最少的机器人沿单向边走完( ...
- POJ-2594 Treasure Exploration floyd传递闭包+最小路径覆盖,nice!
Treasure Exploration Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8130 Accepted: 3 ...
随机推荐
- 判断scrollView的滑动方向
第一种方式: float lastContentOffset; - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { las ...
- json手动解析详解
项目中有时候仅仅需要一个或者多个字段时可以使用这种解析方式,省去创建实体类. 1.首先讲解下最基本的数据格式. 例如: String json="{'name':'小明','action': ...
- 获取应用在AppStore的地址和跳转到AppStore
获取应用程序在App Store中的链接地址 http://itunes.apple.com/cn/app/id533655318?mt=8 把id改成自己app的id就可以了,或者在iTunes和A ...
- codevs——3111 CYD啃骨头(背包)
裸的01背包 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description CYD吃饭时有N个骨头可以啃,但CYD要午睡了 ...
- facebook architecture 2 【转】
At the scale that Facebook operates, a lot of traditional approaches to serving web content breaks d ...
- PHP message: PHP Fatal error: require(): Failed opening required
PHP message: PHP Warning: require(/data/wwwroot/blog.sgfoot.com/bootstrap/autoload.php): failed to o ...
- Microsoft JET Database Engine(0x80004005)未指定错误的解决方法
今天在给一台新的电脑安装IIS,安装成功,建立虚目录后,运行一个已经在别的机器上的正确的asp文件,就是不成功,提示:Microsoft JET Database Engine (0x80004005 ...
- yii2操作数据库 mysql 读写分离 主从复制
转载地址:http://www.kuitao8.com/20150115/3471.shtml 开始使用数据库首先需要配置数据库连接组件,通过添加 db 组件到应用配置实现("基础的&quo ...
- 2016.6.20 eclipse中maven的配置
前期准备: 安装maven,配置maven的环境变量,并且通过mvn -v验证安装成功. 网上的教程说,需要在线或者离线安装maven integration for eclipse插件. 但是我 ...
- 常用快递API及快递在线下单API分享
1.常用快递API 支持顺丰.EMS.申通.圆通.韵达.汇通.中通.天天.德邦.全峰等主流快递公司. 文档地址:https://www.juhe.cn/docs/api/id/43 1.1常用快递查询 ...