转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题目:给出n个城市需要去占领,有m条线段是障碍物,有p个士兵可以用.占领城市有个先后顺序,每个士兵有个背包,占领城市之后,仅能补给一次背包.问背包容量最少是多少,可以用这P个士兵完成任务,起点任意 . http://acm.hdu.edu.cn/showproblem.php?pid=4606 首先:枚举所有顶点,求一下距离,判断是否与线段相交.然…
Delivering Goods UVALive - 7986(最短路+最小路径覆盖) 题意: 给一张n个点m条边的有向带权图,给出C个关键点,问沿着最短路径走,从0最少需要出发多少次才能能覆盖这些关键点 \(1 <= n <= 1000\) \(1 <= m <= 10^5\) \(1 <= w <= 10^9\) \(1 <= C <= 300\) 题解: 对所有的关键点建一个新图,对于任意两个关键点 若满足在原图中的最短路\(dis(0,u)+dis(…
Occupy Cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 509    Accepted Submission(s): 125 Problem Description The Star Wars is coming to an end as the Apple Planet is beaten by the Banan…
题意 有n个城市,m个边界线,p名士兵.现在士兵要按一定顺序攻占城市,但从一个城市到另一个城市的过程中不能穿过边界线.士兵有一个容量为K的背包装粮食,士兵到达一个城市可以选择攻占城市或者只是路过,如果攻占城市,就能装满背包.从城市到城市消耗的粮食等于两城市的距离,如果距离大于士兵当前的背包的容量,士兵就不能走这条路.士兵可以选择空降一次,空降不耗费.求p个士兵攻占所有城市所需要的最小背包容量k. 来源:2013 暑期多校联合训练 第一场 思路 非常好的一道比较综合的题目~首先我们能想到这是可相交…
题目: Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 124 Accepted Submission(s): 102   Problem Description Consider a town where all the streets are one-way and each street leads from one…
http://acm.hdu.edu.cn/showproblem.php?pid=4606 两点之间如果有线段相隔的话,他们的最短路就需要经过线段的端点 把所有线段的端点也加入点数组中,求任意两个点的距离(可达的话,没有其他线段阻挡) 然后对所有的点进行floyd  可以求出任意两点的最短路 然后二分所需容量 根据容量和要求的顺序进行建图,求最小覆盖路径(匈牙利算法) 代码: #include<iostream> #include<cstdio> #include<stri…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 最小路径覆盖的一篇博客:https://blog.csdn.net/qq_39627843/article/details/82012572 题意: 把城市至少分成几个块,规则有三 1. A能B,B能到A,那么A,B一定要在一起. 2. 一个城市只能属于一个块. (说明了是最小不相交覆盖)3. 在一个块里的城市,任意2点之间必须有路径. 对于规则1,就是说强连通的必须在一起,所以用Tarjan…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1151 最小路径覆盖 == 顶点数 - 最大匹配. #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define N 130 int maps[N][N], vis[N], used[N], n, m, ans; bo…
思路:将所有的直线的两个端点和城市混在一起,将能直接到达的两个点连线,求一次floyd最短路径.二分枚举bag容量,然后按给的要先后占领的城市由前向后,把能到一步到达的建一条边.然后求一次最小路径覆盖,就是最少需要多少个士兵才能全部占领,跟给出的p值进行比较. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #def…
The King’s Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2947    Accepted Submission(s): 1049 Problem Description In the Kingdom of Silence, the king has a new problem. There are N cit…
http://acm.hdu.edu.cn/showproblem.php?pid=1151 Air Raid Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7469   Accepted: 4451 Description Consider a town where all the streets are one-way and each street leads from one intersection to an…
HDU 6311 Cover (无向图最小路径覆盖) Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1967 Accepted Submission(s): 442 Special Judge Problem Description The Wall has down and the King in the north has to sen…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 题意:输入t,表示t个样例.接下来每个样例第一行有两个数n,m表示点数和有向边的数量,接下来输入m条有向边,现在要我们把点划分成最少的块,每个块里面的点两两之间要至少有一条有向边可以从其中一个点到另一个点. 思路:分成的区域里面两个点之间至少要有一个点可以到达另一个点,并且要区域数最少,那么就是求最小路径覆盖,但是要求最小路径覆盖的前提是要是无环,所以我们要先用tarjan算法缩点,然后在在缩…
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1151 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#problem/J /* ************************************************************************** //二分图匹配(匈牙利算法的DFS实现) //初始化:G[][]两边顶点的划分情况 //建立G[i][…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 题目大意: 在csdn王国里面, 国王有一个新的问题. 这里有N个城市M条单行路,为了让他的王国更加高效,国王想要将他的王国划分成几个州,每个城市必须属于一个州.对于两个城市(u,v),如果有一条从u到v的路,也有一条从v到u的路,那么u.v必须属于同一个州.对于每一个州里的任何两个城市u.v,都有不经过其他州的路从u到v或从v到u.现在国王想要知道他的王国最少可以划分成多少个州. 解题思路:…
http://acm.hdu.edu.cn/showproblem.php?pid=3861 题意: 国王要对n个城市进行规划,将这些城市分成若干个城市,强连通的城市必须处于一个州,另外一个州内的任意两个城市u,v,有从u到v的路径或从v到u的路径.求最少可以分成几个州. 思路: 这道题目挺好. 首先,强连通分量进行缩点,重新建图. 新建的图就是一个DAG图,接下来就转换成了最小路径覆盖问题. 最小路径覆盖就是用尽量少的不相交的简单路径覆盖DAG的所有顶点.每个顶点只属于一条路径,单个顶点也可以…
HDU 3861 The King's Problem 题目链接 题意:给定一个有向图,求最少划分成几个部分满足以下条件 互相可达的点必须分到一个集合 一个对点(u, v)必须至少有u可达v或者v可达u 一个点仅仅能分到一个集合 思路:先强连通缩点,然后二分图匹配求最小路径覆盖 代码: #include <cstdio> #include <cstring> #include <vector> #include <algorithm> #include &l…
http://acm.hdu.edu.cn/showproblem.php?pid=1151 在一个城市里有n个地点和k条道路,道路都是单向的,并且不存在环.(DAG) 现在伞兵需要去n个地点视察,伞兵只能沿着路的方向走,问最少需要多少伞兵. DAG的最小路径覆盖是指找最小数目的互相不相交的有向路径,满足DAG的所有顶点都被覆盖. 首先给出公式:DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中的最大匹配数. #include <cstdio> #include <cstring&…
The King's Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2137    Accepted Submission(s): 763 Problem Description In the Kingdom of Silence, the king has a new problem. There are N cit…
题意:     一个镇里所有的路都是单向路且不会组成回路. 派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务.每个在一个路口着陆了的伞兵可以沿着街去到其他路口.我们的任务是求出去执行任务的伞兵最少可以是多少个. 思路: 这个题就是个最小路径覆盖问题. 路径覆盖的定义是:在有向图中找一些路径,使之覆盖了图中的所有顶点,就是任意一个顶点都跟那些路径中的某一条相关联,且任何一个顶点有且只有一条路径与之关联,一个单独的顶点是一条路径.最小路径覆盖就是最…
题目大意: 有n个城市,m条道路,城市的道路是单向.  现在我们的伞兵要降落在城市里,然后我门的伞兵要搜索所有道路.问我们最少占领多少个城市就可以搜索所有的道路了. 我们可以沿着道路向前走到达另一个城市.   题目分析: 这道题目其实就是求最小路径覆盖 最小路径覆盖问题:用尽量少的不相交简单路径覆盖有向无环图的所有顶点. 将每个顶点分为两个,分别在X集合和Y集合中,如果存在有向边(a,b),对应在二分图中有(Xa,Yb) 最小路径数=节点数-最大匹配 简单解释: 原图的路径覆盖和新图的匹配间有对…
Dolls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 869 Accepted Submission(s): 403 Problem Description Do you remember the box of Matryoshka dolls last week? Adam just got another box of dolls…
Air Raid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3122    Accepted Submission(s): 2027 Problem Description Consider a town where all the streets are one-way and each street leads from on…
题意:给我们一个图,问我们最少能把这个图分成几部分,使得每部分内的任意两点都能至少保证单向连通. 思路:使用tarjan算法求强连通分量然后进行缩点,形成一个新图,易知新图中的每个点内部的内部点都能保证双向连通,而新图中的点都是单向无环的,这个时候题目中要求的划分部分的条件,其实就是求最短路径覆盖(需要好好想一想),最短路径覆盖 = 结点个数 - 最大匹配值. 这个题我当时把j写成了i,就这么一个小地方,找了快20分钟,还死活发现不了..真是晕死了- 最后我想总结一下这个题: 这个题很巧妙的把割…
<题目链接> 题目大意: 一个有向图,让你按规则划分区域,要求划分的区域数最少. 规则如下:1.所有点只能属于一块区域:2,如果两点相互可达,则这两点必然要属于同一区域:3,区域内任意两点至少有一方能够到达另一方. 解题分析: 双连通的两点必须要属于一块区域,所以可以直接对相互连通的点进行缩点,然后再分析缩点后的图像,因为题目要求划分的区域最少,且区域内的"点"之间至少有一方能够到达另一方.仔细思考后,发现就是对缩点后的图求最小路径覆盖.区域内的"点"至…
题意:一个城镇有n个路口,m条路.每条路单向,且路无环.现在派遣伞兵去巡逻所有路口,伞兵只能沿着路走,且每个伞兵经过的路口不重合.求最少派遣的伞兵数量. 建图之后的就转化成邮箱无环图的最小路径覆盖问题.注意伞兵经过的路口不重合,这很重要,否则需要用传递闭包(Floyd)来辅助建图. 最小路径覆盖覆盖=顶点数-最大匹配. 注意是 n - 最大匹配  不是2n   其实...我看原题好久 也没看出来   经过的路口不重合 这句话...英语烂是原罪...啊啊啊啊   #include <iostrea…
题意:给定一个有向无环图,求最少划分几条路径,使之能够覆盖所有点. 分析:这可以转化为DAG上的最小路径覆盖问题. 路径覆盖的定义:有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联:(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次):如果不考虑图中存在回路,那么每条路径就是一个弱连通子集. |最小路径覆盖| = 点数 - |最大匹配|,所以建图,用匈牙利算法求出最大匹配即可. #include…
先找出强连通分量缩点,然后就是最小路径覆盖. 构造一个二分图,把每个点\(i\)拆成两个点\(X_i,Y_i\). 对于原图中的边\(u \to v\),在二分图添加一条边\(X_u \to Y_v\). 最小路径覆盖 = 顶点个数 - 最大匹配数 #include <cstdio> #include <cstring> #include <algorithm> #include <stack> using namespace std; const int…
路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联. 对于一个有向无环图怎么求最小路径覆盖? 先构造二分图: 对于原图,先拆点,吧每个点i拆成ii,iii.若有边i-->j,则在二分图中,添加边 ii-->jjj(即原来每个点拆为一个入点和出点),这样构成二分图. 则:最小路径覆盖数=原图顶点数-二分图最大匹配数. 粗略解析证明:(设有n个顶点) 若原图没有边,则最大匹配数为0,最小路径覆盖为n,思想:每得到一个匹配,相当于把这俩个点并为一个集合(原…
先说说最小路径覆盖的定义 定义:在一个有向图中,找出最少的路径,使得这些路径,经过每一个点,且每一个点只与一条路径相关联, 由上面得出: 1.一个单独的点是一个路径 2:如果有路径a,b,c....f,g.a为起点,g为终点.那么a到g的点不在与其他点之间存在有向边. 最小路径覆盖=点数---最大匹配数 证明:1  如果匹配数为0,那么图中没有边,需要n条路径 2  如果a,b之间连一条边,那么匹配数增1,需要的路径数会减少一,因为a,b之间只需要一条,那么就证明了 #include<cstdi…