------------图论-------------
TouchDreamer
这个作者很懒,什么都没留下…
展开
-
HDU【1010】Tempter of the Bone
Tempter of the BoneTime Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uSubmit StatusDescriptionThe doggie found a bone in an ancient maze, which fascinated原创 2016-01-19 09:25:12 · 212 阅读 · 0 评论 -
HDU 5723 Abandoned country
题目分析 题目不难,但是注意的点比较多,首先就是写最小生成树算法,这个很简单,我也不用多说了,我要说的就是求期望的问题,我们可以这样求,对于每条边来说,它用到的次数等于这条边左边节点数乘以右边节点数,其实就是乘法原理。然后我们将用到的次数再乘以这条边的权值其实就是这条边对期望所做的贡献,那么在递归的工程中我们可以求出这个值,然后再将这个值除以n*(n-1)/2就可以得到期望了。#include原创 2016-08-05 14:37:47 · 374 阅读 · 0 评论 -
HDU 5876 Sparse Graph(2016 ACM/ICPC Asia Regional Dalian Online)
题目大意 给出一个图,在这个图的补图中给定一个点,求这个点到其他所有点的距离,如果无法到达则输出-1.题目分析 因为这个图的点数比较多,因此遍历所有边很明显是不可能的,铁定超时,因此只能想一些办法来处理,我们可以将所有遍历过的点塞入链表中,如果每一次有bfs求出一些节点的值之后,那么则将这些节点从链表中删除,这样每次遍历的点将会少很多,这样就可以在O(n+m)的时间内得到结果。#incl原创 2016-09-11 18:49:27 · 327 阅读 · 0 评论 -
二分图匹配
算法理解 关于二分图匹配有2种算法,一种是建立源点和汇点,用网络流解决,昨天大致看了一下,但是网络流自己也没有学特别好,所以自己就用匈牙利算法,好理解并且容易写。给出我看的时候用的博客,写的好并且容易理解。二分图匹配,但是我感觉实现用的好像跟交错轨不怎么想,虽然思想上是那样,但是实际上利用了一种贪心的思想,就是每次找到一个点看能不能建立新的边,如果可以那么很明显匹配数增加一,还有一种解决方法就是原创 2016-09-03 11:21:03 · 263 阅读 · 0 评论 -
POJ 3041 Asteroids(二分图匹配)
题目分析 给出一个太空棋盘N*N,并且有K个星球位于这个棋盘上,给出这些星球的位置,然后让你摧毁这些星球,你每次选定一个点,然后你就可以摧毁这个点所在行或者所在列的全部星球。这样我们将所有星球的坐标(x,y)建立有向边,那么很明显这是一个二分图,而题目想要求的正是该二分图的最小点覆盖,最先点覆盖等于最大匹配,那么就已经很明显了。#include <cstdio>#include <cstri原创 2016-09-03 11:53:12 · 234 阅读 · 0 评论 -
欧拉回路算法学习
欧拉回路 定义: 给定无孤立结点图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。 无向图: 图连通,所有点都是偶数度,或者只有两个点是奇数度。当所有点是偶数度时欧拉路起点可以是任意 点;当有两个奇数度点时起点必须是奇数度点。 有向图: 图连通,所有点出度=入度,或原创 2016-10-09 13:18:11 · 992 阅读 · 0 评论 -
HDU 5727 Necklace(二分图匹配)
题目分析 根据阴珠子和阳珠子的互斥关系来建立二分图,但是大家发现如果是拿阴和阳来建立二分图很难建立,这里面我们首先对阴珠子进行全排列,然后根据阴珠子所在的位置,找到每一个位置上有哪些阳珠子能放,并且建立边,这样一个二分图就出来,很明显求出二分图的最大匹配,然后用N-二分图的最大匹配就是所求的答案,然后找到这些答案的最小值输出即可。#include <cstdio>#include <cstr原创 2016-09-08 09:35:13 · 265 阅读 · 0 评论 -
最大流算法之Ford-Fulkerson
最大流算法 该算法的核心就是找建立残余网络并且找增广路,挑战程序设计上讲的很清楚,其实找增广路就是看有没有一条路径可以从起点走到终点的路径,如果没有那么肯定就不存在增广路了,那么此时找到的流就是最大流。HDU 1532 Drainage Ditches#include <cstdio>#include <cstring>#include <iostream>#include <algo原创 2016-10-09 23:47:40 · 402 阅读 · 0 评论 -
POJ 3281 Dining(用当前弧优化的Dinic算法)
题目分析 这道题给出N头牛,F种食物,D中饮料,每头牛只能对应特定的饮料和食物,我们要求出最多的牛都能得到对应的饮料和食物,并且饮料和食物不能重合。我想网络流算法即使抄模板大家也会写,但是本题建图同样是一个很大的问题,想了半天无果。。。。果然是弱弱!! 然后看了一下题解,本题建图很巧妙,不怎么好想,建图过程是这样的,建立一个源点和一个汇点,源点指向食物,食物指向牛,牛指向饮料,饮料指向汇点原创 2016-10-10 11:11:21 · 407 阅读 · 0 评论 -
POJ 2449 Remmarguts' Date(A* + spfa)
题目分析 本题就是求k短路,其实自己也没有学过A*算法f[x]=g[x]+h[x]f[x] = g[x]+h[x] 在本题中g[x]为估价函数,表示从x点达到目标点的距离,注意g[x],小于等于真实值,因此这样就可以用spfa跑一边最短路即可,至于h[x]表示到达当前点x的代价,很明显这个在运算的时候可以得到,这样就可以构建一个优先队列求解了。h[x]+g[x]小的先出队,并且用一个计数的原创 2016-10-21 12:03:28 · 192 阅读 · 0 评论 -
HDU 5883 The Best Path(2016 ACM/ICPC Asia Regional Qingdao Online)
好久没有搞图论了,发现这道题在网络赛的时候过了很多人,因此自己也看了一下,发现不是很难,于是自己做了一下,但是不会,看了题解发现很简单,根据并查集判断联通,根据入度出度判断是否是欧拉回路后者欧拉通路。参见了这位大牛的博客,感觉写得太好了大牛博客。将此题作为模板。/*对于偶数度结点,假设度数为k,那么走的路线中必定会经过该点k/2次比如说某点度数为4,那么必定要到达该点2次,从这点出去2次,这样原创 2016-09-26 17:41:23 · 367 阅读 · 0 评论 -
HDU 1217 Arbitrage(最短路spfa判环)
#include <map>#include <queue>#include <string>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 35;string str1, str2;map <string,原创 2016-09-27 18:39:46 · 256 阅读 · 0 评论 -
2016年中国大学生程序设计竞赛(杭州)
hdu ArcSoft’s Office Rearrangement 这道题做了好久未果,我感觉好难,为啥好多人都做出来了,自己就很气,发现自己发现合并只能与相邻的砖块合并,好气呀!!赛后补题用了2种方法去做它用于解气。 第一种方法纯模拟,如果当前值大于平均值直接分裂,多余的部分给右边,因为是从左往右进行的。注意用long long,不然估计又要哭一天!!!#include原创 2016-10-30 21:46:19 · 477 阅读 · 0 评论 -
POJ 2186 Popular Cows(强连通分量)
题目分析 就是找所有牛都认为是红人的牛的个数,一看就知道是强连通分量按拓扑排序之后标号最大的那个,然后根据反向遍扫一遍看看是否能够把所有点都跑一边,如果可以,说明编号最大的那个强连通分量中所有节点都可以被所有人都看做红人。#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <al原创 2016-10-31 11:23:42 · 297 阅读 · 0 评论 -
WOJ The Highest Peak(离线LCA+端点打tag)
题目分析 一眼望去赤裸裸的树链剖分,然而老年人早已经忘了树链剖分如何写了,然后这道题比赛的时候树链剖分会超时,还可能有爆栈。好吧,不纠结这么多了,看一下官方做法吧。这道题因为是一直插入最后求最高点就可以了。我们想一想对于线性序列来说如何要让某个区间增加一个数或者减少一个数我们怎么做。我们可以在区间头增加一个数,在区间尾减少一个数,然后把所有的插入处理完之后直接跑前缀和即可得出结果。这道题同样也是原创 2017-04-25 09:43:53 · 328 阅读 · 0 评论 -
HDU 3371 Connect the Cities
题目分析 简单的最小生成树的题目,首先这道题我超时了n次,但是因此也知道了,当图为稠密图的时候需要注意是否超时,改进了之后982ms险过,但是用prim的话时间复杂度低一点,因此大家要注意。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int f原创 2016-07-07 10:24:06 · 187 阅读 · 0 评论 -
HDU 1879 继续畅通工程
已经修好的路一定要往里面加#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;struct Edge{ int from,to,dist,status; bool operator < (const Edge temp)const原创 2016-07-06 22:51:52 · 224 阅读 · 0 评论 -
HDU 1874 畅通工程续
个人想法 研究了一下spfa和dijkstra,虽然dijkstra快,而且时间效率高,比较稳点,但是写个模板真的要写好多,我感觉好烦,我去,网上看了一下spfa,其实跟用优先队列优化的dijkstra没什么特别大的区别,但是spfa可以解决有负边出现的问题,应用范围比dijkstra广,所以我又打算搞一个spfa的模板。。不容易呀!!#include <cstdio>#include <q原创 2016-06-19 23:32:18 · 257 阅读 · 0 评论 -
HDU【1242】Rescue
RescueTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 23025 Accepted Submission(s): 8139Problem DescriptionAngel was caught原创 2016-01-19 10:39:17 · 252 阅读 · 0 评论 -
POJ【1789】 -- Truck History
Truck HistoryTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 22865 Accepted: 8871DescriptionAdvanced Cargo Movement, Ltd. uses trucks of different types.原创 2016-01-11 20:27:37 · 215 阅读 · 0 评论 -
POJ【1502】MPI Maelstrom
MPI MaelstromTime Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64uSubmit StatusDescriptionBIT has recently taken delivery of their new sup原创 2016-01-11 22:58:55 · 318 阅读 · 0 评论 -
HDU【2066】一个人的旅行
一个人的旅行Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 27129 Accepted Submission(s): 9389Problem Description虽然草儿是个路痴(就是在杭电待了一年原创 2016-01-11 23:29:34 · 566 阅读 · 0 评论 -
POJ【2031】Building a Space Station
Building a Space StationTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 6439 Accepted: 3162DescriptionYou are a member of the space station engineering te原创 2016-01-11 23:35:13 · 459 阅读 · 0 评论 -
HDU【1875】畅通工程再续
畅通工程再续Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 21573 Accepted Submission(s): 6811Problem Description相信大家都听说一个“百岛湖”的地方吧原创 2016-01-11 23:42:47 · 384 阅读 · 0 评论 -
HDU【1875】A strange lift
A strange liftTime Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64uSubmit StatusDescriptionThere is a strange lift.The lift can stop can at ev原创 2016-01-11 23:46:13 · 339 阅读 · 0 评论 -
蓝桥杯 历届试题 城市建设
历届试题 城市建设 时间限制:1.0s 内存限制:256.0MB 锦囊1锦囊2锦囊3问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修。市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他。 C市中有n个比较重要的地点,市长希望这些地点重点被考虑。现在可以修一些道路原创 2016-03-05 19:10:49 · 1492 阅读 · 0 评论 -
hdu 【1285】 确定比赛名次
确定比赛名次Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19888 Accepted Submission(s): 7985Problem Description有N个比赛队(1 Input原创 2016-04-09 16:09:15 · 373 阅读 · 0 评论 -
HDU 5438 Ponds
题目大意这道题就是说把只连接一个池塘和不连接池塘的池塘给出掉,然后把最去掉之后得到的最终图形的每一个连通块中池塘数为奇数的每个池塘的对应的价值加起来,然后输出。题目分析计算每个点的度,并用数组存一下,同时用标记数组来表示这个池塘是否被去掉,如果度为0或者度为1,那么将该池塘去掉,同时将该点连接的池塘的度减1,如果减去之后的度数为1,那么则将该点加入队列,重复该步骤,知道队列为空为止。然后就是用bfs原创 2016-05-25 20:45:05 · 426 阅读 · 0 评论 -
武汉科技大学网络赛1575: Gingers and Mints
1575: Gingers and MintsTime Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitted: 18 Accepted: 12[Submit][Status][Web Board]Descriptionfcbruce owns a farmland, the far原创 2016-04-18 20:05:44 · 1053 阅读 · 0 评论 -
最短路模板
个人理解 自己以前也做了一些最短路的水题,基本上都差不多,所以这里我写一个模板,以后留着方便自己使用。当然我用模板的这道题是POJ 2378 Til the Cows Come Home。 大家可以发现,直接用邻接矩阵存的话空间开销很大,用时为O(n^2),但是最短路算法在图论中实在太重要了,因此需要优化。显然可以用邻接表优化,优化后的时间复杂度为O(logn*m),大家知道m最大可原创 2016-06-11 12:10:47 · 351 阅读 · 0 评论 -
HDU 3790 最短路径问题
题目分析 这道题就是一道最短路的基础题,直接套模板就可以了,当然需要注意一点就是题目所说的如果存在多个最短路径需要找出花费最小的。这道题用了280MS,我已经用队列优化过了,可能用vector实现邻接表没有直接写邻接表快。#include <cstdio>#include <queue>#include <vector>#include <cstring>#include <iostr原创 2016-06-19 20:20:53 · 226 阅读 · 0 评论 -
UVA 11374 Airport Express(最短路+枚举)
题目分析 我们可以从S出发算法最短路,然后从E出发算出最短路,然后枚举每一条特殊通道即可。输出可能有些麻烦。#include <queue>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e4+100;co原创 2017-07-17 23:00:20 · 284 阅读 · 0 评论