图论
Dan__ge
Today is difficult,tomorrow is more difficult,but the day after is beautiful.
展开
-
HDU 3018 欧拉回路+图的性质
点击打开链接题意:给定m条无向边,每条边要经过一次且只能经过一次,问至少多少笔可以将整个图走完思路:这道题可以将图分为多个板块,对于每个板块,我们可以形成欧拉回路或者偶拉通路,如果可以形成欧拉回路的话,则需要判断每个顶点的度数,如果都为偶数,则说明可以行成欧拉回路,这样的话结果就+1;如果形成偶拉通路的话,则需要奇数顶点的个数/2相加。4个奇度顶点肯定是需要2条通路,不懂的可以在纸原创 2016-03-15 21:11:40 · 623 阅读 · 0 评论 -
coderforces 405E 图论dfs
点击打开链接题意:给出一个无向图,将图拆成两条相邻边的形式,输出两条相邻边对应的点,三个一输出思路:如果m为奇数的话,没有解。用dfs搜索到最底层,如果最底层的边是偶数,则每两个和上一个节点组成一个输出,如果剩下一个的话,则将它存入队列,和其他的边构成后输出。#include #include #include #include #include #include #inclu原创 2016-03-16 13:09:39 · 538 阅读 · 0 评论 -
HDU 5040 图论bfs
点击打开链接题意:从M走到T,路上有摄像头,且每一秒都顺时针转90,摄像头可以照到旁边相邻的位置,如果被照到的话,走一步的时间为3,正常走的话时间+1,你也可以选择呆在原地不动,但时间也+1;问最短时间走到T思路:用bfs搜索,用优先队列维护最短的时间,每一个点的状态有四个,所以记录时的数组应该是5倍的,具体看注释#include #include #include #include原创 2016-03-16 16:27:35 · 649 阅读 · 0 评论 -
HDU 5521 15年亚洲赛现场题目 图论之最短路
点击打开链接题意:两个人,一个人从1出发,令一个人从n出发,两个人可以停在某个点上,另一个人走过去,花费的时间是走的时间长的那个人用的时间,输出这样走的情况下,花费最小的时间。并输出哪个点符合这个最短时间,并输出,题目上题意很清晰。思路:通过两次最短路找到最短时间,再遍历一次找到符合的点就行了,但题难在如何建图,如果暴力建图的话就会超时,此时我们可以自己模拟多个点,然后建图的时候将每个集合原创 2016-03-16 20:12:56 · 630 阅读 · 0 评论 -
HDU 4786 图论之最短路
点击打开链接题意:问有没有一个生成树的权值之和是斐波那契中的值思路:分别求一次最大生成树权值和为max1和最小生成树权值和min1,如果不能生成一个树,直接输出No,不然判断min1到max1中有没有斐波那契数就行了,至于为什么可以,我感觉我队友说的比较有道理,最小生成树可以加一条边然后删一条边生成次小生成树,依次类推,我们可以用次小生成树在生成一个次小次小生成树,一直可以推到最大生成树,原创 2016-03-29 19:52:41 · 599 阅读 · 0 评论 -
POJ 1698 图论之网络流
点击打开链接题意:T组数据,每组第一个为n,表示有n演出,接下来的九个数前七个表示周一到周日,如果为1,可以在这天演出,后两个数代表演出多少天才算完成任务和在多少周之前必须演出结束,问这个人可以完成这些要求吗思路:用最大流解决,建立一个源点和一个汇点,将源点与每一个节目相连,流量为这个节目需要的天数,然后将这个节目与每星期可以演出的日子连一条流量为1的边,最后将所有可以演出的日子与汇点连一原创 2016-03-20 13:50:42 · 1504 阅读 · 0 评论 -
HDU 1054 最小定点覆盖
点击打开链接题意:一个顶点要一个人放哨,则和他相连的几个定点就不需要人放哨了,问最少需要多少人放哨思路:很明显的题意,很明显的最小顶点覆盖,最小顶点覆盖=最大匹配,建个双向边,结果除2,我的二分图匹配一直是用最大流写的#include #include #include #include #include #include #include using namespace s原创 2016-04-01 13:39:51 · 881 阅读 · 0 评论 -
HDU 4292 最大流
点击打开链接题意:有n个人,每个人都有自己喜欢的食物和饮料,如果一个人不能得到自己的喜欢的,则他将离开,问如何分配可以使剩下的人最多思路:刚刚写的时候还以为是二分图匹配呢,无情wa,之前写过POJ的3281,一个类型嘛,没有区别,改了之后A之,这里解释一下为什么牛会和牛在连一条容量为1的边,这是因为如果一个牛可以匹配好多食物和饮料,如果不限制的话,这一个牛就可以匹配多种食物,但是我们要的是原创 2016-04-04 13:05:31 · 1028 阅读 · 0 评论 -
hdu 5294 最短路+最大流
点击打开链接题意:题目要求1走到n的路程为最短路的路径,但是路径可能有多个,都要用,如果不是最短路径上的边就不走它了,第一个结果是问最少删除几条边1走不到n,第二个是最多删除几条边后,1仍能够走到n思路:我们要先求出最短路,并将路径上的边挑出来,然后建图,此时的图流量和时间都是1,因为最后的时候我们只要的是边的个数,这样求最小割=最大流就是第一个答案,然后求最短路ans[n],用总变数m减原创 2016-04-04 16:21:39 · 1348 阅读 · 0 评论 -
HDU 5137 数据结构之最短路
点击打开链接题意:给出一系列的关系图,每两个人求对方办事会花费多少钱,1要将儿子送到n那去读书,利用这些关系来完成,但是你和1有矛盾想让他完成不了,你有一个权利让其中一个人不做这些事,除了1和n之外的其他人都会答应你,如果1不能完成则输出Inf,不然输出,他要花费的最大价值思路:用最短路完成,遍历2~n-1这些点,将他们标记后就不能在使用,然后求最短路,如果走不到n,则输出Inf,不然我们原创 2016-03-22 16:03:34 · 886 阅读 · 0 评论 -
POJ 2186 强联通分量
点击打开链接题意:牛A喜欢牛B,若牛B喜欢牛C,则牛A喜欢牛C,问最后多少牛被其他所有牛喜欢思路:用强联通分量进行缩点,最后形成的图是有向无环图DAG,而拓扑序的值为DAG的长度,则加一,但是最后我们要判断一下这些牛是不是被所有牛喜欢,因为等于DAG长度的所有点肯定是一个强联通分量,因此它们可以相互喜欢,我们用其中一只牛判断就行了,判断时就用反向边判断这个牛能不能到达其他的牛就行了#i原创 2016-04-02 15:43:54 · 726 阅读 · 0 评论 -
HDU 4289 最大流最小割
点击打开链接题意:给定的点中,每个点都有自己的权值,问从s走到d,删除几个点之后走不到了,且这几个点的权值最小思路:看着就像是最小割,直接模版敲完,因为权值在点上,而不是边上,所以要将点拆开,然后求最大流,无向边不用考虑太多,因为这些边并不影响整个网络的最大流作用只是将点联通而已,如a--b,则建a+n到b的无穷大,和b+n到a的无穷大,因为每个点的后续都是i+n,1#include #原创 2016-04-05 15:49:37 · 976 阅读 · 0 评论 -
HDU 5025图论之BFS
点击打开链接题意:从K走到T,S为怪,走的时候就多花费一秒,走到T时收集m把不同的钥匙,但是规定收集n之前,必须1~n-1全部收集完毕,怪最多有5个思路:怪最多就有5个,然后钥匙是1~9把,我们每个点的状态就不会很多,在BFS时每个点的状态进行标记就行了,5个怪状态压缩着判断,因为这个怪在第二次经过的时候已经死了,不用花费时间去杀死它#include #include #include原创 2016-03-23 16:15:18 · 699 阅读 · 0 评论 -
HDU 4514并查集判环+最长路
点击打开链接题意:中文题......思路:先判断能否成环,之前以为是有向图,就用了spfa判断,果断过不了自己出的样例,发现是无向图,并查集把,两个点有公共的父节点,那就是成环了,之后便是求最长路了,之前用spfa将权值取反后求最短路,然后结果取正就完事了,只是加个源点0而已,跑一边竟然能超时,难道是姿势不对吗.....,然后用了更暴力的bfs,因为是一个无环的图,所以从一个点出发后,它能原创 2016-04-06 13:05:06 · 2020 阅读 · 0 评论 -
HDU 3836 强联通分量
点击打开链接题意:就是问你最少连多少边之后所有点都可以互相到达思路:问的就是强联通的含义,先进行强联通分量进行缩点,如果强联通分量为1,恭喜你图已经联通,输出0即可,否则我们剩下的点是强联通缩点之后的点,其实我们就是可以将这些点当成要联通的点就行了,而现在已经缩过点了,所以我们这个残图只要满足每个点都有出度和入度就可以形成强联通分量为1的图,但是这个判断前提必须是已经缩过点之后的残图,现在原创 2016-04-06 18:10:53 · 880 阅读 · 0 评论 -
HDU 4975 最大流+判断环
点击打开链接题意:给定的分别是每行值的和,每列值的和,每个元素的值在0~9之间,问有多少种情况符合条件,多种,一种和不可能分别输出三种情况思路:刚读完题根本没有思路,看了网上的才知道用网络流,那样的话就好办了,建个源点,与每行建一条流量为行和的边,每一列与汇点建一条流量为列和的边,每行与每列建一条流量为9的边,跑最大流后判断是否满流就行了,但是要怎么判断有没有多组解呢,当残余网络中有环时,原创 2016-04-08 12:21:19 · 2551 阅读 · 0 评论 -
HDU 4888 最大流+判环
点击打开链接题意:给定NxM的矩阵,每个点的元素在0~k之间,然后每行元素的和,每列元素的和,问能否有情况使条件符合思路:建个源点,与每行建一条流量为行和的边,每一列与汇点建一条流量为列和的边,每行与每列建一条流量为9的边,跑最大流后判断是否满流就行了,但是要怎么判断有没有多组解呢,当残余网络中有环时,我们可以调整这个环来符合条件,将一条边加1,则另一条边可以减去1,所以判断残余网络中有没原创 2016-04-08 15:21:49 · 900 阅读 · 0 评论 -
HDU 3829 二分图
点击打开链接题意:动物园有n只猫,m条狗,还有p个小孩,每个小孩有一个喜欢的动物和一个讨厌的动物,如果一个小孩喜欢狗,那么他一定不喜欢猫,每个小孩高兴的条件是他喜欢的动物在动物园并且不喜欢的动物不在,问饲养员将那些动物移出动物园可以使最多的小孩高兴思路:最后剩下的小孩他们之间喜欢和讨厌的是不会有冲突的,那么可以转化为开心的小朋友的最大独立集,最大独立集=顶点数-最大匹配;而这个最大匹配是什原创 2016-04-25 18:52:02 · 3791 阅读 · 1 评论 -
HDU 5652 图论之并查集
点击打开链接题意:上边是中国,下边是印度,黑点的部分不可以走,下面的矩阵1代表黑点不能走,然后给了Q,每一次将一个点变成黑点,即不能走,问最少多少次就可以完成思路:如果有一条黑点连成的线,从走到右的说明我们达成了目的,那就好办了,每一个黑点可以与周围的8个黑点相连,这样我们在最左边建个汇点最右边建个源点,每次询问这两个点在不在一个集合就行了,用并查集轻松实现,只要两个点相连就放到一个集合里原创 2016-03-27 16:38:41 · 796 阅读 · 0 评论 -
hdu 5093 最大流或二分图
点击打开链接题意:给个m行n列的矩阵,其中#代表冰山,*代表大海,o代表浮冰,现在要停一些船,船只能停在大海上,但是每一行每一列最多可以停一艘船,但是如果中间有冰山隔离的话,一行或一列可以停靠多艘,问最多可以停多少艘船思路:之前做过类似的,但是没有冰山这个限制,那个二分图直接用源点连行,列连汇点就行,这道题用二分图应该才是正解,我看了题意之后,感觉不到二分图的存在,根本没往那边想,但是还是原创 2016-04-25 21:02:06 · 3614 阅读 · 0 评论 -
ZOJ 3460 二分图+二分
点击打开链接题意:有n个塔攻击,m个敌人的塔被攻击,每个塔攻击前要准备T1秒,注意是秒,发射后下一次攻击就要预热T2分钟,炮弹的攻击速度为v,问如何攻击可以使花费的时间最少思路:网络流的题,知道构图就不叫题了,我们这样看,对于每一个攻击的塔来说,它发动m次攻击后肯定已经将敌人的塔消灭掉了,那么这个塔的m次攻击全部处理出来,那么对于它的第I次攻击攻击塔J,时间就是准备的时间T1*i+预热的时原创 2016-04-26 17:14:55 · 696 阅读 · 0 评论 -
HDU 4971 最大权闭合图
点击打开链接题意:n个工程,每个工程完成后会有利润,但是完成每个工程都需要克服一些难题,每个难题都会消耗资金,而且有的难题会有一些特殊要求,那就是在完成它的时候它希望有的难题已经完成,这会在输入下面的矩阵中体现出来思路:经典的网络流24题里面一道题的变形嘛,求最大权闭合图,这个也就等于利润总和-最小割,我的总利润就那么多,我希望的是消耗资金越少越好,也就是最小割,然后结果就出来了,但是和2原创 2016-04-13 20:43:04 · 722 阅读 · 0 评论 -
AOJ 2249 图论之最短路
点击打开链接题意:给了一些边,现在要你删除其中一些边,使1到其他位置的最短距离不变,但是费用要最小思路:用dijkstra求最短路,在更新路程距离时将费用更新即可,代码中有注释#include #include #include #include #include #include #include using namespace std;typedef long long原创 2016-03-28 18:24:00 · 1059 阅读 · 0 评论 -
UVA 11090 图论加二分
点击打开链接题意:给n条边和权值,求能形成的环中,权值和除以点的个数的值的最小值思路:其实做的时候一点思路也没有,在网上看了别人的题解,还是很简单的,思维还是没锻炼到啊....,就是用二分判断mid,将所有的边权减去mid,如果这时候有负环的话,则说明这个mid是可以满足的,比如说没减去mid时,有一个k个点形成的环的权值和为k*mid-1;那么这个环是满足的,但是我们没有办法求这个k个点原创 2016-03-28 20:24:46 · 746 阅读 · 0 评论 -
POJ 1087最大流
点击打开链接题意:有n个插座,还有n个用电器,每个用电器会选择自己用的插座,但只有一种,最后有k个转换器,输入a,b代表b插座可转化为a插座,问最后有几个用电器没有插座可用思路:最大流跑一边就行了,但是建边没想到这么麻烦,因为是字符串要每次都比较一下,比过之后建好图跑最大流,用m减去就行了#include #include #include #include #include #原创 2016-04-14 18:32:15 · 1727 阅读 · 0 评论 -
POJ 1236 强联通分量
点击打开链接题意:每个点可以传输给下一个点,第一问问你最小需要多少个点就可以将所有点都传输到,第二问问你我只传输给一个点,问最少加几条边,使得所有点可以传输思路:只要一个点的入度为0,那么这个点一定是第一问中要传输的点,所以统计入度为1的点的个数就是第一问,第二问问你加多少边,我们要加入的边就是入度为0的点数和出度为0的点数的最大值,与这题hdu 3836相似,一个缩过点后的图要想联通的话原创 2016-04-11 14:37:59 · 860 阅读 · 0 评论 -
POJ 3180 强联通分量
点击打开链接题意:英语并没有过六级,出这么长的英文题真是没爱了......看看讨论竟然让我求强联通的节点数>=2的个数,为什么题目非要写的人类理解不了......思路:那还要什么思路啊,强联通模版敲完,找一下就行了#include #include #include #include #include #include using namespace std;typedef原创 2016-04-11 16:14:06 · 853 阅读 · 0 评论 -
POJ 2449 第K短路模版题 A*+最短路
点击打开链接题意:求S到T的第K短路的长度思路:学习了一些A*的性质,f(v)=d(v)+h(v);d是初始状态到v的距离,h是v到目标状态的距离,而在求第K短路是我们将h定义为到目标状态的最短距离,而我们利用优先队列将f小的先出队列,这样在跑A*的时候,首先到达目标状态的距离肯定是最短距离先到达,而我们要的是第K短的,所以我们将第K次出队列的目标状态的f输出就是我们要求的,特殊的是当S=原创 2016-04-11 19:52:26 · 1580 阅读 · 0 评论 -
ZOJ 2314 有上下界的网络流
点击打开链接题意:给定m条边和n个节点,每条边最少的流量和最多的流量,保证每个节点的出入流量和相等,问可以形成吗,可以则输出每条边的流量思路:一道有上下界的网络流,因为有下界,说明我们每条边必须跑大于等于下界的流量,那我们可以转化一下,将下界设为必要边,也就是我们肯定会跑的边,而且这道题是没有源点和汇点的,所以我们要加这两个点,而对于一条边,a,b,low,high,我们a->b连的流量为原创 2016-04-15 13:15:38 · 3237 阅读 · 0 评论 -
POJ 1904 强联通分量
点击打开链接题意:不说题意了,直接说它让干什么把,我们要找每个王子可以娶的女人,并且他娶了其中一个剩下的王子依然可以找到老婆,也就是固定一条边后,剩下的关系还是可以构成一个完备二分图,然后每个王子能娶的公主从小到大输出思路:这种题没做过,看了看网上的题解,是要找强联通分量,那么可以肯定的是如果id号王子在强联通分量里,那么这里面的所有公主都满足条件,因为图是王子连公主,公主原创 2016-05-10 19:42:47 · 1171 阅读 · 0 评论 -
UVA 11383 KM性质
点击打开链接题意:一个n*n的矩阵每个格子里有一个正整数w(i,j)你的任务是确定每行一个整数row(i)每列一个整数col(i),对每个格子都有w(i,j)思路:本题利用KM算法l(x)+l(y)>=w(x,y)的性质直接可以知道得出的顶标之和即为最小的。#include #include #include #include const int INF=0x3f3f3f3f;原创 2016-04-28 20:51:13 · 3994 阅读 · 1 评论 -
POJ 3694 强连通分量+LCA
点击打开链接题意:给一个图,然后依次加进去边,问每次加过边后还有几个桥,之前加入的会影响后面加入的思路:先将图的桥全部找出来,然后将桥的点标记上,然后不需要缩点,直接进行裸的LCA,再找最近公共祖先的时候,遇到标记的点将结果减1,然后将标记取消,不知道为什么我写的跑的特别慢,别人写的都很快,有神犇知道求指教#include #include #include #includ原创 2016-05-11 08:25:51 · 1188 阅读 · 0 评论 -
HDU 4587 割点
点击打开链接题意:给一个无向图,可能是不连通的,问删除两个点之后联通块最多的数量,两个点随意思路:之前写过一个删除一个点的剩余联通块的题目,和这个差不多嘛,但是要注意细节,WA了10多次,对于一个5000个点和5000条边的图来说,我们可以先去枚举删除一个点,然后剩下的操作就和删除一个点的相同了我们找到最大的cnt,cnt记录的是这个点删除后的联通块个数-1;具体细节看代码把,注意这种情况原创 2016-05-11 11:01:48 · 948 阅读 · 0 评论 -
ZOJ 3229 有上下界的有汇源的最大流
点击打开链接题意:有n天和m个女孩,每天我可以收集女孩的照片(单身狗来袭),但每天我最多可以收集D个照片,而且对于i好女孩,我这天最少收集L张照片,最多R张照片,并且每个女孩的照片至少要G[i]张,问能否收集成功,成功则输出每天每个女孩的收集量思路:昨天看了看上下界的题目,感觉还是蛮好理解的,今天哪这题开刀,本弱做了快一个下午才做出来,发现建图有个地方建错了,调了半天bug........原创 2016-04-16 15:43:08 · 4094 阅读 · 0 评论 -
HDU 5045 费用流求最大权
点击打开链接题意:有n个人和m到题目,每个人做对的概率以矩阵形式给出,问如何分配才可以使做对的概率最大,有一个限制条件是做到目前为止每两个人的做题数量差距不能超过1,也就是前n道题目,必须一人做一个思路:网上都是dp多一点,用网络流也可以,不过麻烦很多,可是本弱是一点dp都不会的选手啊,只能用网络流了,对于那个限制条件,我们可以以前n道题建一次图,然后再来n个,不过就直接建完就可以了,然后原创 2016-04-29 11:51:31 · 3864 阅读 · 0 评论 -
HDU 4685 强联通分量+网络流
点击打开链接题意:与POJ 1904 极其相像的一道题目,POJ的将一个完备匹配图给了你,并给了你一组可能的情况,很简单,但是这道题目,给的既不是完备匹配也没有给出可行的匹配方案,难的不要不要的思路:刚开始看以为是和1904一模一样呢,然而难度上升的真快,看了一下是13年的多校题目,过了10几个把,可想而知这难度不是我等能够A掉的,刚自己想的是只加王子使其变成完备匹配,然后WA了,对了说一原创 2016-05-24 19:27:48 · 4476 阅读 · 3 评论 -
HDU 4862 最小费用最大流+路径覆盖
点击打开链接题意:给个n行m列的数列,一个人可以走k次,每次选择一个未走过的点,这个点继续走的话,可以往下走或往右走,当然他可以跳着走,也就是可以跳到下面或右面任意一个位置,但前提是这个点没有走过,初始能量为0,从a,b走到c,d消耗能量是|a-c|+|b-d|-1;问走K次能否将所有点走到,并且每个点只能走一次,,成功的话输出最后可以剩下的最多能量思路:先要处理k次能否成功,想到了最小路原创 2016-04-29 18:33:15 · 5252 阅读 · 0 评论 -
HDU 1863 并查集+Kruskal
点击打开链接题意:不解释了思路:也不解释了,并查集判段连通性,Kruskal求最小生成树,大水题(/ □ \)#include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x原创 2016-05-25 19:34:17 · 3203 阅读 · 0 评论 -
HDU 4496 并查集
点击打开链接题意:给了一个图,问你依次将边删除后,图还剩下多少个联通的块思路:就是问你有多少个块嘛,可以用并查集来判断是不是在一个块内,然后我们将顺序反过来判断一下就可以了,水题~~~#include #include #include #include #include using namespace std;typedef long long ll;typedef原创 2016-05-25 19:56:49 · 3148 阅读 · 0 评论 -
UESTC 686 BFS
点击打开链接题意:问你这个人从1开始走能不能将这个图走遍,有的点是锁着的,需要对应房间的钥匙思路:就是个BFS,不能走的点先记录下来,然后判断这里面的点有钥匙可以打开的便出来跑,直到没有这样的点为止,判断是不是所有的点都到了,判断输出即可,感觉数据有点弱.......(/ □ \)#include #include #include #include #include #原创 2016-05-25 21:40:19 · 3509 阅读 · 0 评论