![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
图论
文章平均质量分 85
ophunter
不会DP!
展开
-
BZOJ1001狼抓兔子(平面图最小割)
题目请戳这里题目大意:给一个n*m的网格图,表示一个地图。起点(1,1),终点(n,m)。每条边上有一个权值,表示该路径上的兔流量。现在一些兔子从起点沿着边跑到终点。然后有一些大灰狼要抓这些兔子。一只狼能抓一只兔子。现在狼王想知道至少要派多少狼能堵住兔子的路。题目分析:很裸的最小割问题。条件反射最大流搞之。但是这题的数据量是10M。n,m也比较大。硬上了一个最大流果然挂了。这题的n,m原创 2013-11-11 12:57:25 · 1351 阅读 · 0 评论 -
poj3436ACM Computer Factory(不用拆点+最大流)
题目请戳这里题目大意:一台电脑有p个零件组成,有n个电脑组装机,每个组装机只能组装特定机器。即第i台组装机只能组装必含某些零件或者不能含有某些零件的半成品,通过这台组装机可以组装成另一台半成品/成品。每个组装机每个小时能组装的台数一定,给定n个组装机和组装条件,求每小时最多能装配多少台电脑,并输出效率最高时的一些可行方案。题目分析:最大流。每个组装机为一个点,对于每个组装机,如果组装条件没原创 2013-09-10 21:17:37 · 1267 阅读 · 0 评论 -
poj2391Ombrophobic Bovines(floyd+二分+拆点+最大流)
题目请戳这里题目大意:n块草地,每块草地有一些牛,每块草地有雨棚,可以容纳一定量的牛。草地间有路,可以无限通过牛,牛通过某条路有一定的时间。现在求最短的时间让所有的牛都能到雨棚。题目分析:最大流。题目给的是无向图,所以先跑一遍floyd,求出任意2块草地之间最少的时间。因为牛通过路的时间是累加的,所以要把无向图改成有向图,保证牛走某条路后时间是累加的。方法是拆点,将草地i拆成i和i+n原创 2013-09-10 17:42:49 · 1250 阅读 · 0 评论 -
poj1637Sightseeing tour(混合图欧拉回路)
题目请戳这里题目大意:求混合图欧拉回路。题目分析:最大流。竟然用网络流求混合图的欧拉回路,涨姿势了啊啊。。其实仔细一想也是那么回事。欧拉回路是遍历所有边一次又回到起点的回路。双向图只要每个点度数为偶数即可,有向图要保证所有点入度等于出度。求路径的话,dfs即可。混合图的话,就比较复杂。首先将有向边定向,求出所有点的入度和出度,如果某个点入度和出度之差为奇数,则一定不存在欧拉回路,因原创 2013-09-11 00:43:15 · 1871 阅读 · 0 评论 -
poj1087&hdu1526A Plug for UNIX(最大流)
题目请戳这里题目大意:房间里有n个插座,每个插座都不一样。有m个不同的用电器,每个用电器有一个插头,每个插头只能插相对应的插座。再给k类转换器,每类转换器能把A插头转化成B插头,每类转换器无限个。求不能充电的用电器最少的个数。题目分析:最少不能充电的用电器就是最多能充电的用电器数量。最大流。设一个源点一个汇点,源点到每个用电器连一条权为1的边,因为每种用电器只有一个。每个插座到汇点连一条边原创 2013-09-10 11:30:53 · 1259 阅读 · 0 评论 -
poj3469Dual Core CPU(ISAP求最小割)
题目请戳这里题目大意:n个工作,2个CPU,每个工作都可以工作在2个CPU上,并且对于工作i,在第一个CPU上工作的代价为ai,在第二个CPU上工作的代价是bi,再给m对工作,每对工作有数据交换,如果这2个工作工作在同一个CPU上,数据交换无代价,否则数据交换代价为w。求n个工作完成的最小代价。题目分析:有2个CPU,每个工作只能工作在一个CPU上,所以我们可以将所有的工作分成2类:工作在原创 2013-09-09 14:55:25 · 1253 阅读 · 0 评论 -
poj1459Power Network(最大流)
题目请戳这里题目大意:好难读的题目。。有n个点,编号0~n-1,每个点可能是发电站,中转站或者用户。发电站i可以发pi的电,最大pmax,用户i消耗ci的电,最大cmax,中转站不发电也不消耗电。每两个站点之间有一条边,边权L,表示这条边最多能送L的电。求所有用户消耗最大的电量。题目分析:网络流。需要增加一个源点和汇点。发电站是供电者,所以对于每个发电站,源点与其建一条边,边权为该发电站最原创 2013-09-09 21:34:05 · 1029 阅读 · 0 评论 -
poj1149PIGS(最大流)
题目请戳这里题目大意:养猪场有许多猪,关在m个猪圈里,有n个顾客要来买猪,一个一个的来。每个顾客有一些猪圈的钥匙,这个顾客只会买这些猪圈里的猪。顾客买完猪后,养猪场老板可以将这个顾客打开的猪圈里的猪重新分配。求老板能卖出最大数量的猪。题目分析:网络流。对于菜鸟来说,此题的建图比较难。因为某个顾客打开一些猪圈买完猪后,老板可以将这些打开的猪圈的猪重新分配。所以每个猪圈的猪的数量是动态的,随着原创 2013-09-09 11:03:27 · 1245 阅读 · 4 评论 -
poj1273&hdu1523Drainage Ditches(ISAP)
题目请戳这里题目大意:略。题目分析:网络流模版题。不过数据很弱,只能测很烂的模版。第一道网络流详情请见代码:#include #include#include#includeusing namespace std;const int N = 205;const int M = 410;const int inf = 0x3f3f3f3f;struct node原创 2013-09-08 10:47:54 · 1065 阅读 · 0 评论 -
hdu3488Tour(KM)
题目请戳这里题目大意:给n个城市,m条有向边,求一些有向环,保证每个点只出现在一个环中并且保证总权值最小。题目分析:每个点在一个环中,所以对于每个城市都有且仅有一条入边和出边,将一个点拆成2个点,建图跑一下KM即可。因为求最小值,所以所有边权值取反,求最大权完美匹配。因为题目保证有解,所以不需要考虑无解。trick:有重边。详情请见代码:#include #include#原创 2013-08-31 19:58:59 · 865 阅读 · 0 评论 -
hdu2813One fihgt one(KM)
题目请戳这里题目大意:曹操带了m个手下去打吕布,吕布有n个手下(n题目分析:就是要求一个最小权完备匹配。KM算法解决之。注意建图的时候边权值取相反数,因为KM是求最大权匹配的,求出最大权完备匹配后再取反输出。关于KM算法,百科讲的还不错,不过还是有点抽象,要详解的话推荐戳这里图建好了就是跑模版的事了。详情请见代码:#include#include#include#in原创 2013-08-29 22:36:45 · 853 阅读 · 0 评论 -
poj1325Machine Schedule(二分匹配)
题目请戳这里题目大意:2种机器A,B,A有n个工作模式0~n-1,B有m个工作模式0~m-1。一开始都工作在0模式,现在有k个工作,对于工作i可以工作在机器A的x模式或者B的y模式,机器切换模式要耗费时间,所以希望尽量少的切换模式。求机器完成k个工作最少的切换次数。题目分析:根据题意很容易建一个二分图。顶点分别为机器A和机器B的工作模式,每个工作一条边。要求的就是这张图的最小点覆盖。而二分原创 2013-08-29 15:44:45 · 936 阅读 · 0 评论 -
hdu4725The Shortest Path in Nya Graph(拆点 + 最短路dijkstra | SPFA)
题目请戳这里题目大意:给n个点,m条无向边,边权w,为走这条路的代价。每个点属于某一层,从某层到隔壁层代价都是固定的c,求1到n最短路。题目分析:最短路。比赛的时候硬上SPFA,结果T出翔了。还是太年轻了啊。因为每个点可以借助层的属性,到达其他点就有了其他的路径。所以有必要把每层也抽象出额外的点。因为每层的点也是不连通的,就是说如果点i和点j在同一层,并不代表他们之间距离就是0。所以对原创 2013-09-12 12:28:49 · 1689 阅读 · 1 评论 -
poj2125Destroying The Graph(最小割+输出方案)
题目请戳这里题目大意:给一张有向图,现在要选择一些点,删掉图中的所有边。具体操作为:选择点i,可以选择删除从i出发的所有有向边或者进入i的所有有向边,分别有个代价ini和outi,求最小的代价删掉所有边。并输出删除方案。题目分析:最小割。因为每次删除的是一个点的所有入边或者所有出边。那么就很明显了,拆点,将i拆成i和I+n2个点,分别表示第i个点的入度点和出度点。源点到每个i连边,表示从i原创 2013-09-13 00:41:51 · 2788 阅读 · 0 评论 -
2012 Asia Hangzhou Regional Contest--hdu4463Outlets(mst)
题目请戳这里题目大意:二维平面内给n个点,求将所有点连通需要的最小代价,代价为点间距,其中给定2个点必须直接相连。题目分析:2012杭州现场赛四大水题之三。裸的最小生成树。prime求最小生成树。给定的2个点先加到初始集合中,再扩展n-2个点即可。详情请见代码:#include #include#include#include#include#include原创 2013-10-09 22:51:37 · 1173 阅读 · 0 评论 -
SPOJ4206Fast Maximum Matching(hopcroft-karp)
题目请戳这里题目大意:裸的二分匹配。题目分析:数据比较强,用来测模版的。这题用hungry跑着会比较吃力,所以用hopcroft-karp算法。这个算法较hungry高效是因为每次bfs找到一个增广路集,然后用dfs进行多路增广,同时找多条增广路,从而效率大增。其实怎么看hk算法都是个没有边权的dinic啊。参照着wikipedia 敲了一个hk,效率貌似不高啊。。。详情请见代码:原创 2013-10-09 12:16:36 · 1078 阅读 · 0 评论 -
hdu3722Card Game(KM最大带权匹配)
题目请戳这里题目大意:给n个字符串,再给一个n的排列:p1,p2....pn。然后将第i个字符串贴到第pi个字符串后面,然后形成一个环。pi的首字符和第i个字符串的末尾字符就相邻,如果这2个字符相等,各自再向内延伸一个位置,知道这个环首尾字符不等为止。延伸的位置为该环的得分(如果pi == i,得分为0),对于每个排列,有n个这样的环,求得分和最大为多少。题目分析:最大带权匹配!!以为是个原创 2013-10-08 00:51:16 · 1369 阅读 · 0 评论 -
zoj2588 Burning Bridges(无向图的桥)
题目请戳这里题目大意:给一张无向图,现在要去掉一些边,使图仍然连通,求不能去掉的边。题目分析:就是求无向图的桥。tarjan算法跑一遍,和无向图割点十分类似,这里要找low[v] > dfn[u]的边(u,v)便是割边,因为v是u的孩子,但是v无法访问到u的祖先,那么断开这条边原图必不连通,因此这是桥。这题会有平行边,平行边必定不是桥。所以dfs的时候要判断一下。详情请见代码:原创 2013-09-21 11:01:04 · 1090 阅读 · 0 评论 -
poj1144Network(无向图割点数)
题目请戳这里题目大意:给一张无向图,求割点数量。题目分析:tarjan算法求割点。关于无向图割点,这里说的很清楚了。直接建图跑一遍tarjan算法即可。详情请见代码:#include #include#include#includeusing namespace std;const int N = 101;int adj[N][N];bool flag[N][N]原创 2013-09-20 20:33:40 · 1135 阅读 · 0 评论 -
poj1523SPF(求图的割点)
题目请戳这里题目大意:给一个网络,求所有割点,并且求出去掉这个割点后原图增加了多少个连通分量。题目分析:tarjan算法。dfs遍历一遍,求出dfs树(森林),dfn[i]表示点i的访问时间戳,low[i]表示i能追溯到的最早的节点。点i为割点的充要条件是:1:i为dfs树的根,并且i至少有2个孩子。这个比较好理解,如果i是根并且有2个以上的孩子,那么#include #incl原创 2013-09-19 18:34:13 · 1341 阅读 · 0 评论 -
poj1966Cable TV Network(无向图最小点割集 ISAP+邻接矩阵)
题目请戳这里邻接表的ISAP被卡了一天。。。TLE。。。。终于被卡了。。。好忧桑啊啊啊。。。题目大意:给一张无向图,求最少去掉几个点使图不连通。题目分析:求无向图的点连通度,拆点建图跑最大流。具体做法是:将一个点i拆成2个点:i和i+n,分别表示从第i个点出去和进入第i个点。那么i+n->i建边,边权1,对于每一条边(a,b),建边a->b + n,b->a+n,边权无穷。然后枚举没有原创 2013-09-20 18:25:16 · 1448 阅读 · 0 评论 -
poj2914Minimum Cut & hdu3002 King of Destruction(Stoer-Wagner)
题目请戳这里题目大意:意如其名。题目分析:裸的全局最小割。这题代码直接贴上~详情请见代码:#include #include#include#includeusing namespace std;const int N = 505;const int inf = 0x3f3f3f3f;int g[N][N],dis[N],v[N];bool vis[N];i原创 2013-10-04 19:39:49 · 1140 阅读 · 0 评论 -
hdu3691Nubulsa Expo(Stoer-Wagner求无向图全局最小割)
题目请戳这里题目大意:给一张图,n个点,m条无向边,每条边有权值,表示该路人流量上界。给定起点s,问如何选终点t,能是s-t的所有路径上最小人流量总和最大,给出这个最大流量。题目分析:根据最大流最小割定理,此题就是求一个最小割。给定的起点是无用信息,因为起点一定在某个割集中,那么终点在另一个割集随便找一点即可。所以此题求的是一个全局最小割。最大流可以解决。但需要O(n)枚举终点。再加上最大原创 2013-10-04 17:57:00 · 1817 阅读 · 0 评论 -
zoj3422Go Deeper(2-sat + 二分)
题目请戳这里题目大意:go(int dep, int n, int m) begin output the value of dep. if dep < m and x[a[dep]] + x[b[dep]] != c[dep] then go(dep + 1, n, m) end 读上面程序段,yy出函数功能。数组a,b,c长度为原创 2013-09-30 18:42:51 · 1049 阅读 · 0 评论 -
poj3308Paratroopers(最小割)
题目请戳这里题目大意:给一个n*m的矩阵,给一些点(ri,ci)表示该点在第ri行第ci列。现在要覆盖所有的点,已知覆盖第i行代价为Ri,覆盖第j列代价为Cj。总代价是累乘的,求最小总代价能覆盖所有的点。题目分析:最小割。增加一个超级源点和超级汇点,源点到行连边,边权为覆盖行的代价,每列到汇点建边,边权为覆盖该列的代价。对于给定的点对,ri->cj连边,边权无穷大。求一个最小割即可。因为根原创 2013-09-12 17:29:03 · 1440 阅读 · 0 评论 -
hdu4598Difference(差分约束)
题目请戳这里题目大意:给一张图,n个点,一些边,第i个点有一个权值ai,使之满足2个约束条件:1:abs(ai)2:如果点i和点j之间有边abs(ai - aj) >= T其中T是一个正实数。让判断给定的图是否存在一个赋值满足上述约束条件。题目分析:差分约束。当时比赛的时候很傻很天真,判断不存在奇环就可以了。要满足2个约束条件的话,相邻2个点一正一负才可以满足。但是忽略了条原创 2013-08-28 23:02:47 · 976 阅读 · 0 评论 -
poj1201&zoj1508Intervals(差分约束)
题目请戳这里题目大意:给定n个整数闭区间[ai,bi]和n个正整数ci,求一个正整数集合Z,要求Z与[ai,bi]交集的元素个数不小于c,Z中元素最小个数。题目分析:差分约束。首先记录下所有集合的最右端点为st,记Si为0-i的所有正整数,那么Z最大为st。先假设Z为0-st的所有元素的集合,然后根据给定的约束关系慢慢缩小。对于区间[ai,bi],Z与之交集至少为ci,那么得到约束关系原创 2013-08-28 15:57:15 · 942 阅读 · 0 评论 -
hdu3622 Bomb Game(二分+2-SAT)
Bomb GameTime Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2798 Accepted Submission(s): 933Problem DescriptionRobbie is playin原创 2013-07-23 09:29:44 · 1127 阅读 · 0 评论 -
zoj3717 Balloon(二分+2SAT)
BalloonTime Limit: 3 Seconds Memory Limit: 65536 KB Special JudgeThe weather is wonderful today. Gao takes a walk in the garden with his girlfriend. His girlfriend likes balloons s原创 2013-07-23 10:55:39 · 985 阅读 · 0 评论 -
hdu3062 Party(2-SAT入门)
PartyTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3149 Accepted Submission(s): 991Problem Description有n对夫妻被邀请参加一个聚会,因为场地的问原创 2013-07-21 10:25:59 · 1532 阅读 · 0 评论 -
hdu1269(强连通模版题)
迷宫城堡Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4794 Accepted Submission(s): 2106Problem Description为了训练小希的方向感,Gardon建立了一原创 2013-07-19 22:50:12 · 1059 阅读 · 0 评论 -
poj2553The Bottom of a Graph(强连通+缩点)
The Bottom of a GraphTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 7699 Accepted: 3161DescriptionWe will use the following (standard) definitions fr原创 2013-07-20 12:42:14 · 1192 阅读 · 0 评论 -
poj2186Popular Cows(强连通+缩点)
Popular CowsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 19647 Accepted: 7960DescriptionEvery cow's dream is to become the most popular cow in the原创 2013-07-20 10:31:11 · 1046 阅读 · 0 评论 -
hdu2767Proving Equivalences(强连通+缩点)
Proving EquivalencesTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1962 Accepted Submission(s): 743Problem DescriptionConsid原创 2013-07-20 10:03:36 · 1187 阅读 · 0 评论 -
杭电1116Play on Words(欧拉路径(回路)的判断)
->题目请戳这里题目大意:给你一些单词,问是否能完成单词接龙,即一个单词的最后一个字母是另一个单词的首字母,每个单词都必须有,并且只能出现一次。题目分析:每个单词只取首尾字母,从首字母到尾字母建一条有向边,最后建成一张有向图,题目转化成了在这张有向图中能否找到一条欧拉路径或者回路。用并查集维护这张图可以判断图是否连通。来复习一下欧拉图的判断条件:1。对于无向图,每个顶点的度数为偶数原创 2013-06-06 16:45:43 · 1062 阅读 · 0 评论 -
杭电2894DeBruijin(欧拉回路)
->题目请戳这里题目大意:一个旋转鼓,上面均匀分成m份,每一份可以表示二进制的0或1,现在求一个最短的01序列,使任意的k个相邻的01序列表示不同的值。并输出字典序最小的一个序列。题目分析:这个序列是循环的,长度为k的二进制数表示的范围是0-2^k - 1,鼓转动一小格,当前k个二进制位与前一个状态相比,只有首尾2个二进制位发生了改变,中间的k-1位是不变的,考虑以这k-1位二进制位为点,原创 2013-06-07 09:10:32 · 1184 阅读 · 0 评论 -
poj1041John's trip(欧拉回路+输出路径)
->题目请戳这里题目大意:一个小镇有m条街,n个交叉口,每条街上有john的一个朋友,现在john要拜访每个朋友1次,输出字典序最小的访问街道编号。起点是输入第一组数据最小的端点。题目分析:典型的欧拉回路问题。先判断图是连通的并且所有点度数为偶数,因为这题是无向图,建图的时候每条边正反建一次。由于要字典序最小,所以要先dfs编号较小的街道,所以建图的时候稍微注意一下,我是先把所有的街道排序原创 2013-06-06 19:19:17 · 970 阅读 · 0 评论 -
poj2230Watchcow(简单欧拉回路)
->题目请戳这里题目大意:m条路连n个地方,这m条路是双向的,即从a到b和从b到a是不一样的。现在从1出发,沿每一条路走1遍回到起点1,给出这样的一种走法,依次输出经过的顶点,special judge。题目分析:红果果的欧拉回路问题,对每一对点,建2条有向边,最后dfs得到一条欧拉回路。这题要注意数组大小,M是边的数量,再正反建边,就是2M条边,最后有4M+1个点,所以如果要保存所有的点原创 2013-06-06 16:52:41 · 1079 阅读 · 0 评论 -
poj3678 Katu Puzzle(2-SAT+经典建图)
Katu PuzzleTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6669 Accepted: 2444DescriptionKatu Puzzle is presented as a directed graph G(V, E) with eac原创 2013-07-23 15:21:11 · 1115 阅读 · 0 评论 -
hdu4115 Eliminate the Conflict(3SAT->2SAT)
Eliminate the ConflictTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 982 Accepted Submission(s): 410Problem DescriptionConfl原创 2013-07-24 10:05:55 · 1333 阅读 · 0 评论