uva1201 DAG 最小路径覆盖,转化为 二分图
大白例题P356 你在一座城市里负责一个大型活动的接待工作。你需要去送m个人从出发地到目的地,已知每个人的出发时间出发地点,和目的地点,你的任务是用尽量少的出租车送他们,使得每次出租车接客人,至少能提前一分钟达到他所在的位置,城市为网格 (x1,y1) ===>(x2,y2) 需要|x1-x2|+|y1-y2|分钟
题解:
本题的模型是DAG的最小路径覆盖。所谓最小路径覆盖就是在图中找尽量少的路径,使得每个结点恰好在一条路径上(话句话说,不同路径不能有公共点)。单独的节点也可以作为一条路径。
本题中“时间” 是一个天然的序, 因此可以构图如下: 每个客人是一个节点,如果同一个出租车在接完客人u以后来得及接客人v,离岸边u_>v, 不难发现是一个DAG, 并且它的最小 路径覆盖就是本题的答案。
大白书 P357讲解:DAG最小路径覆盖的解法把所有节点i 拆成 X 节点i 和Y 节点i' , 如果图G中存在有向边 i->j,则在二分图中引入i->j', 设最大匹配数位m,则结果就是 n-m.
#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>
#include <cstdio>
using namespace std;
const int maxn =;
struct person{
int time;
int sx,sy,tx,ty;
}P[maxn];
struct BPM{
int n,m;
int left[maxn],right[maxn];
bool S[maxn],T[maxn];
vector<int>G[maxn];
void init(int n, int m){
this->n = n;
this->m = m;
for(int i=; i<m; i++) G[i].clear();
}
void add_edg(int u, int v){
G[u].push_back(v);
}
bool match(int u){
S[u] =true;
for(int i =; i<(int )G[u].size(); i++){
int v = G[u][i];
if(T[v] == false){
T[v]=true;
if(left[v]==- || match(left[v])){
left[v]=u; right[u]=v;
return true;
}
}
}
return false;
}
int solve(){
memset(left,-,sizeof(left));
memset(right,-,sizeof(right));
int ans=;
for(int u =; u<n; u++){
memset(S,false,sizeof(S));
memset(T,false,sizeof(T));
if(match(u)) ans++;
}
return ans;
}
}solver;
int main()
{
int cas;
scanf("%d",&cas);
for(int cc =; cc<=cas; ++cc){
int m;
scanf("%d",&m);
for(int i=; i<m; i++){
int th,tm;
scanf("%d:%d%d%d%d%d",&th,&tm,&P[i].sx,&P[i].sy,&P[i].tx,&P[i].ty);
P[i].time = th*+tm;
}
solver.init(m,m);
for(int i=; i<m; i++){
int a1 = abs(P[i].sx-P[i].tx)+abs(P[i].sy-P[i].ty);
for(int j=; j<m; j++){
int a2 = abs(P[i].tx-P[j].sx)+abs(P[i].ty-P[j].sy);
if( (P[i].time+a1+a2) < P[j].time ){
solver.add_edg(i,j);
}
}
}
printf("%d\n",m-solver.solve());
}
return ;
}
uva1201 DAG 最小路径覆盖,转化为 二分图的更多相关文章
- 【LA3126 训练指南】出租车 【DAG最小路径覆盖】
		
题意 你在一座城市里负责一个大型活动的接待工作.明天将有m位客人从城市的不同的位置出发,到达他们各自的目的地.已知每个人的出发时间,出发地点和目的地.你的任务是用尽量少的出租车送他们,使得每次出租车接 ...
 - 训练指南 UVALive - 3126(DAG最小路径覆盖)
		
layout: post title: 训练指南 UVALive - 3126(DAG最小路径覆盖) author: "luowentaoaa" catalog: true mat ...
 - 1350 Taxi Cab Scheme   DAG最小路径覆盖
		
对于什么是DAG最小路径覆盖以及解题方法在我的另外的博客已经有了.http://www.cnblogs.com/Potato-lover/p/3980470.html 此题的题意: 公交车(出租车)车 ...
 - bzoj 2044 三维导弹拦截——DAG最小路径覆盖(二分图)
		
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044 还以为是CDQ.发现自己不会三维以上的…… 第一问可以n^2.然后是求最长不下降子序列 ...
 - POJ1422 Air Raid 【DAG最小路径覆盖】
		
Air Raid Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6763 Accepted: 4034 Descript ...
 - 【最小路径覆盖】【二分图】【最大流】【Dinic】bzoj2150 部落战争
		
裸的最小路径覆盖. 把每个点拆点,变成二分图. 对于可以连边的点对(i,j):i->j'(1); 对于任意一点i,若i点为'.':S->i(1),i'->T(1); 答案为所有'.' ...
 - hdu3861 The King’s Problem   强连通缩点+DAG最小路径覆盖
		
对多校赛的题目,我深感无力.题目看不懂,英语是能懂的,题目具体的要求以及需要怎么做没有头绪.样例怎么来的都不明白.好吧,看题解吧. http://www.cnblogs.com/kane0526/ar ...
 - HDU 3861 The King’s Problem (强连通缩点+DAG最小路径覆盖)
		
<题目链接> 题目大意: 一个有向图,让你按规则划分区域,要求划分的区域数最少. 规则如下:1.所有点只能属于一块区域:2,如果两点相互可达,则这两点必然要属于同一区域:3,区域内任意两点 ...
 - 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题  有向无环图最小路径覆盖  最大流  二分图匹配  匈牙利算法
		
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...
 
随机推荐
- Fiddler实现手机的抓包(转载园友小坦克)
			
Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求. Fiddler能捕获IOS设备发出的请求,比如IPhone, IPad, MacBook ...
 - Spark2 Dataset DataFrame空值null,NaN判断和处理
			
import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache.spark ...
 - 8.23 js
			
2018-8-23 15:12:05 js 参考 :https://www.cnblogs.com/liwenzhou/p/8011504.html 2018-8-23 20:56:29 上面js的东 ...
 - poj1611 The suspects【并查集】
			
严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁.为了减少传播给别人的机会, 最好的策略是隔离可能的患者. 在Not-Spreading-Y ...
 - HDU 3045 - Picnic Cows - [斜率DP]
			
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3045 It’s summer vocation now. After tedious milking, ...
 - hyperledger
			
http://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html https://github.com/hyperledger/block ...
 - Is It A Tree?----poj1308
			
http://poj.org/problem?id=1308 #include<stdio.h> #include<string.h> #include<iostream ...
 - PS快速制作下雪效果
			
PS快速制作下雪效果 具体的制作步骤如下: 1.打开PS,打开素材,打开窗口-动作 2.创建新动作,参数如下图 3.回到图层,建立一个图层,填充黑色,如下图 4.滤镜-像素化-点状化,参数如下图 5. ...
 - 【CSS3】CSS3自学
			
CSS3学习网址:http://www.runoob.com/css3/css3-tutorial.html
 - 创建list方法总结
			
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sheismylife/article/details/28878593 构建一个list 注意要标记 ...