图论
呆呆的人v
这个作者很懒,什么都没留下…
展开
-
poj 3459 Dual Core CPU(最小割 di…
现在做题 越做心越虚了。。。3459 Dual Core CPU(最小割 dinic)" TITLE="poj 3459 Dual Core CPU(最小割 dinic)" />不能真正理解模版每一句的含意 根本就无法谈优化 都是加人的。我只是站在别人的肩膀上而已题意:现在有n个任务,两个机器A和B,每个任务要么在A上完成,要么在B上完成,而且知道每个任务在A和B机器上完成所需要的费用。然原创 2013-04-23 09:23:25 · 458 阅读 · 0 评论 -
poj 2485 highways(prim)
题意:求连通n个城市间所需最短路径中最长的思路:prim#include "stdio.h"#define M 505#define MAX 65537int map[M][M];void prim (int n){ intcost[M],flag[M],i,j,k,min,sum = 0; for (i = 0;i { cost[i]原创 2013-04-23 09:21:56 · 604 阅读 · 0 评论 -
noj 1286 - 宗教 (并查集)
题意:n个人中,有m对人的宗教是相同的,给出m对人宗教相同人的编号,求他们中有多少种不同的宗教信仰思路:并查集第一次用并查集,原先打算把parent 初始化为-1 发现这样统计宗教种类太麻烦 于是套用 依然 的一种方法 嘻嘻~比方便统计#include "stdio.h"#define M 50005int find (int parent[],int v){原创 2013-04-23 09:22:12 · 468 阅读 · 0 评论 -
poj 2387 : Til the Cows (d…
原文地址:2387 : Til the Cows (dijkstra)">poj 2387 : Til the Cows (dijkstra)作者:依然题意:一个农场有n(1 ~ 1000)个landmarks,有t(1 ~2000)条道路连接,问Bessie要从编号为n的landmarks到编号为1的landmarks,最少得走多少的路程? 思路:dijkstra求两点间最短路径。由于每转载 2013-04-23 09:22:32 · 389 阅读 · 0 评论 -
poj 1975 Median Weight Bead(floy…
题意:有n个bead 给出m种轻重关系 求有多少人bead肯定不可能是 in the median weight思路: floyd 求出每个bead 与其它bead的关系 1表示比其它的重,-1表示轻于其它的。如果它重于其它的个数,或轻于其它的个数超过一半 那它就不可能是中间的ps:第一道自己理解的floyd 题,开心 嘻嘻!#include #include #define M原创 2013-04-23 09:22:49 · 465 阅读 · 0 评论 -
poj 3159 Candies (spfa+栈)
题意: 简单的说就是 给出m给 si 与sj的关系,其中sj的糖数不能比si的多c个,即sj-si <=c 最后求 flymouse(n)最多能比soonpy(1) 多多少糖,思路:话说这是个差分约束问题 其实就是求最短路问题 只要求出dis[n]就行了 原先用 队列实现spfa 但超时了,因为是每个点入队列超过30000 次 后改为栈实现 ps:有负环时,用栈比队列快,(原因是啥,我也原创 2013-04-23 09:23:03 · 404 阅读 · 0 评论 -
poj 1716 Integer Intervals(差分…
题意:给出N个整数区间[ai,bi],使得序列在区间[ai,bj]的个数>=2个,求出序列的最小长度如样例:3 6 2 40 24 7所对应的序列为:1 2 4 5思路: dis[i] 表示 [0,i)中的元素个数,所以有 dis[v]-dis[u] >= 2还有个隐含条件 1>=dis[i+1]-dis[i]>=0用spfa 实现,因为有负环所以用栈结构,队列是45原创 2013-04-23 09:23:05 · 339 阅读 · 0 评论 -
poj 1459 power network(网络流 di…
题目大意: 给几个发电站,给几个消耗站,再给几个转发点。 发电站只发电,消耗站只消耗电,转发点只是转发电,再给各个传送线的传电能力。 问你消耗站能获得的最多电是多少思路:建立一个超级源点和超级汇点,把发电站相连起来,消耗站连起来 然后就是模版的力量了在此也讲了下dinic的原理:求最大流的本质,就是不停的寻找增广路径。直到找不到增广路径为止。对于原创 2013-04-23 09:23:21 · 346 阅读 · 0 评论 -
2914 - Minimum cut (最小割 stoer…
求最小割 直接写模版 但我不明白模版的含意- Minimum cut (最小割 stoer_wagner)" TITLE="2914 - Minimum cut (最小割 stoer_wagner)" />#include #include #define VM 600#define inf 0x3f3f3f3fint v[VM],dis[VM],vis[VM],map[VM][V原创 2013-04-23 09:23:23 · 425 阅读 · 0 评论 -
HDU 4280 Island Transport(网络…
题意:有N个岛屿 M条无向路 每个路有一最大允许的客流量,求从最西的那个岛屿最多能运用多少乘客到最东的那个岛屿。思路:很单纯的网络流,重点是卡时间 模板的高效性很重要啊该模板详解 参见这里 模板题就不注释了//4796MS 8836K#include #include #define VM 100010#define EM 400010const int inf = 0原创 2013-04-23 09:28:09 · 429 阅读 · 0 评论 -
poj 1274 The Perfect Stall(二分…
题意:FJ有N头cow ,M个stall for the milk 每头只愿在自己喜欢的stall上产奶,求最大匹配。思路:简单的二分匹配。//332K 0MS#include #include #define N 205int mat[N][N],vis[N],xM[N],yM[N];int n,m;bool DFS(int u){ for (int v原创 2013-04-23 09:28:05 · 374 阅读 · 0 评论 -
poj 3275 Ranking the Cows(floyd …
题目:FJ想按照奶牛产奶的能力给她们排序。现在已知有N头奶牛(1 ≤ N ≤ 1,000)。FJ通过比较,已经知道了M(1 ≤ M ≤10,000)对相对关系。每一对关系表示为“XY”,意指X的产奶能力强于Y。现在FJ想要知道,他至少还要调查多少对关系才能完成整个排序。思路:如果排序可以确定了,潜台词就是任意两头牛之间的关系都可以确定了。N头奶牛一共有C(N, 2) = N * (N - 1原创 2013-04-23 09:27:58 · 548 阅读 · 0 评论 -
匈牙利算法学习资料(转载)
原文地址:匈牙利算法学习资料(转载)作者:依然二分图最大匹配的匈牙利算法: 二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。 最大匹配: 图中包含边数最多的匹配称为图的最大匹配。 完美匹配: 如果所有点都在匹配边上,称这个最大匹配是完美匹配。 最小覆盖:在一个二分图上用最少的点(x 或 y集合的都行),让每转载 2013-04-23 09:23:29 · 413 阅读 · 0 评论 -
poj 2532 Gopher II(最大匹配)
题意:有n个晏鼠 m个洞,给出他们的坐标,每个晏鼠的速度都是一样的V如果在s秒内,它们没有跑到洞是就会被老鹰吃掉,每个洞只能容纳一个晏鼠 求最后有多少晏鼠会被吃掉思路: 这是个比较简单的二分图最大匹配问题,建图也相对简单,只在晏鼠到洞的距离小于V*S 就把他们连起来 求出最大匹配再用n-最大匹配#include #include #include #define M 110in原创 2013-04-23 09:23:55 · 385 阅读 · 0 评论 -
poj 2762 Going from u to v or fr…
题意:有N个山洞m条路,问任意两点x y 能否存在从x到y 或者从y到x。思路:注意是或 而不是和。所以缩点后,不是判断强连通为1。第一种方法:只要用拓扑判断入度为0的点是否为1个,如果有多个,就出现在分叉,不可能从x到y。第二种方法:从入度为0的点 DFS 搜索 最长能到达的路径 如果路径长度等于点数,说明可以从源点访问完所有点。第二种做法的代码:#include #inclu原创 2013-04-23 09:24:12 · 409 阅读 · 0 评论 -
poj 1135 Domino Effect(dij)
题意:(看了半天没整明白)有一个多米诺骨牌的游戏,我们知道有关键骨牌和普通骨牌,将关键骨牌推倒之后,整个骨牌阵就会倒下,推动其他的关键骨牌,其中推倒关键骨牌A使的关键骨牌B也倒,需要一定的时间,所以本题要求求出最后一个倒的骨牌的位置,及其时间...每个骨牌阵都由关键骨牌1推起思路:对于倒的是关键骨牌我们可以通过Dijkstra来实现,而对于在中间倒的我们注意到一个现象——它所用的时间必然是原创 2013-04-23 09:26:17 · 458 阅读 · 0 评论 -
poj 3177 Redundant Paths (双连…
题意:有F个农场 有R条路把它们相连(当然是无向的) 要求加多少条边,使得每两个农场之间起码有两条不同的路径思路:求无向图的边双连通 缩点后,求出叶子结点的个数 加1 除2 就是要加的边 (这是个定理,这里就不证明了)// 268K 0MS#include #include #define VM 5010#define EM 10010struct E{原创 2013-04-23 09:26:34 · 469 阅读 · 0 评论 -
poj 2117 Electricity(割点)
题意:有N个核电站,问去掉一个点,最多能使N个核电站分成几部份?思路:求出去每去掉每个割点子图被分成的个数,取其中最大的。再加上原来有多少个图。//864K 547MS#include #include #define M 10010struct data{ intto,nxt;}edge[M*3];int head[M],vis[M],dfn[M],lo原创 2013-04-23 09:26:37 · 479 阅读 · 0 评论 -
poj 1459 power network(网络流 sa…
题意思路 见dinic 解法那篇文章poj 1459 power network(网络流 dinic模版+详解)该解题报告主要是讲解一下 sap算法 不明白sap原理和gap优化的 可以去下载这个资料看一下网络流sap算法(whitecloud) 里面对sap讲得挺详细的,但模板不敢恭维 (因为我们缺的就是时间)下面是自己写的模板(dinic相近的部份就不注释了,且移步到看那篇文章)原原创 2013-04-23 09:27:10 · 465 阅读 · 0 评论 -
poj 2584 T-Shirt Gumbo(最大流 s…
题意:有xn个参赛者,给出每个参赛者所需要的衣服的尺码的大小范围,在该尺码范围内的衣服该选手可以接受,给出这5种型号衣服各自的数量,问是否存在一种分配方案使得每个选手都能够拿到自己尺码范围内的衣服. 思路:最大流 建立超级源点src 与5种衣服相连 边权为衣服的数量 超级汇点与xn个人相连 边权为1然后每个人与自己相应的尺码间也建立一条边,边权为1 求最大流 等于 xn 就输出 T-s原创 2013-04-23 09:27:54 · 454 阅读 · 0 评论 -
最小费用最大流,模板
原文地址:最小费用最大流,模板作者:依然一、最小费用最大流的模型在保证流量最大的前提下,所需的费用最小,这就是最小费用最大流问题. 带有费用的网络流图: G=(V,E,C,W)V:顶点; E:弧;C:弧的容量;W:单位流量费用。任意的弧对应非负的容量c[i,j]和单位流量费用w[i,j]。满足:① 流量f是G的最大流。② 在f是G的最大流的前提下,流的费用最小。 F是G的最大流转载 2013-04-23 09:23:27 · 499 阅读 · 0 评论 -
poj 1422 Air Raid(匈牙利 DAC图最…
题意:在一座城市里,有n条街道 都是单向的,每个街道有两个路口,街道不会形成回路 求最小伞兵数量,能访问所有路口思路:DAC图的最小路径覆盖问题 = 顶点数-最大匹配;#include #include #define M 150int n,link[M],map[M][M],vis[M];int DFS (int u){ int v; for (v = 1;原创 2013-04-23 09:23:34 · 608 阅读 · 0 评论 -
poj 2594 Treasure Exploration(f…
题意:地球人要到火星去寻宝,派机器人去战,每个机器人能走多条路,在每个点进行寻宝为了使花费最小,所以要尽可能少的派机器人。思路:刚开始以为是纯粹的DAG最小路径覆盖,WA 了得用floyd传递闭包,把通路都连起来,因为机器人可以从一条路走到其它路上(有路的前提下) 然后就是求 最大匹配了#include #include #define VM 505int map[VM][V原创 2013-04-23 09:24:01 · 381 阅读 · 0 评论 -
poj 3114 Countries in War(Tarjan+floyd)
题目大意是这样说的,在一个有向图中,每两点间通信需要一定的时间,但同一个强连通分量里传递信息不用时间,给两点u,v求他们最小的通信时间。思路:题意比较直白,就是缩点后,重新建图,求其最短路。看了一下点的范围是500,查询次数是100,想了一下,用SPFA求最短路时间会快点,但floyd也可以,代码短。最后发现时间有点多。。。。//2644K 985MS#include#includec原创 2013-07-24 09:39:12 · 528 阅读 · 0 评论 -
hdu 4607 Park Visit(求树的最长直径)
题意:有n个景点,n-1条边,相连点间的距离为1,问遍历k个点,求最小的步行距离。思路:1.求出这棵树的最长直径,如果k小于最长直径len ,则最小距离为k-1,否则为(k-1en)*2+len-1;2.如何求一棵树的最长直径。从任一个点BFS,最后进队列的点必为直径两个端点中的一个。再以该点为起点DFS求出树的直径。//406MS 2988K#include原创 2013-07-24 17:17:27 · 570 阅读 · 0 评论 -
poj 3180 The Cow Prom(强连通分量 Tarjan)
题意:有N个牛,围在一水池边,它们用绳子互相绑着(有方向的)。如果绳子的方向一致,它们就能顺时针转,问有多少组牛可以跳舞。思路:简单有向图的强连通分量。求出强连通分量,且强连通分量里的点数大于等于2的块就能跳舞。//836K 79MS#include#include#includeusing namespace std;const int VM = 10005;原创 2013-07-23 17:07:26 · 804 阅读 · 0 评论 -
KM算法详解+模板
【KM算法及其具体过程】(1)可行点标:每个点有一个标号,记lx[i]为X方点i的标号,ly[j]为Y方点j的标号。如果对于图中的任意边(i, j,W)都有lx[i]+ly[j]>=W,则这一组点标是可行的。特别地,对于lx[i]+ly[j]=W的边(i, j,W),称为可行边;(2)KM算法的核心思想就是通过修改某些点的标号(但要满足点标始终是可行的),不断增加图中的可行边总数,直到图原创 2013-04-23 09:23:43 · 519 阅读 · 0 评论 -
hdu 4635 Strongly connected(Tarjan)
做完后,看了解题报告,思路是一样的。我就直接粘过来吧最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数尽可能的多,则X部肯定是一个完全图,Y部也是,同时X部中每个点到Y部的每个点都有一条边,假设X部有x个点,Y部有y个点,有x+y=n,同时边数F=x*y+x*(x-1)+y*(y-1),整理得:F=N*N-N-x*y,当x+y为定值时,二者越接近,原创 2013-08-02 15:57:54 · 616 阅读 · 0 评论 -
hdu 4612 Warm up(无向图Tarjan+树的直径)
题意:有N个点,M条边(有重边)的无向图,这样图中会可能有桥,问加一条边后,使桥最少,求该桥树。思路:这个标准想法很好想到,缩点后,求出图中的桥的个数,然后重建图必为树,求出树的最长直径,在该直径的两端点连一边,则图中的桥会最少。从这题中学到两点,所以写一下解题报告。1.官方说judge的栈小,得手动增栈 #pragma comment(linker,"/STACK:1024000原创 2013-07-28 16:12:33 · 1059 阅读 · 0 评论 -
poj 1486 Sorting Slides(二分匹配)
题意:有n个大小不等透明的幻灯片(只有轮廓和上面的数字可见)A、B、C、D、E…按顺序叠放在一起,现在知道每个幻灯片大小,由于幻灯片是透明的,所以能看到幻灯片上的数字(给出了每个数字的坐标,但不知道这些数字分别属于哪个幻灯片),现在要你根据当前的已知信息,输出能够确定的幻灯片编号和数字的匹配。思路:很明显的二分匹配问题,但求的是确定匹配,先求出最大的匹配。然后依次删除每一条边,再求其最大匹原创 2013-09-07 10:32:17 · 816 阅读 · 0 评论 -
poj 3686 The Windy's(最小费用最大流)
题意:有n个任务需要用m台机器来完成,给出了第i个任务在第j个机器上需要花的时间。但是,每台机器一次只能工作一个任务,因此有些任务如果非要在某台机器上运行可能需要等待。求任务需要时间的最小平均值。思路:第一眼看到感觉就是网络流问题,但没想到如何表示一台机器完成多个任务的时间如何表示。起初想到用标记边访问的次数来表示,细想是错的。。。。看了别人的想法,原来是用折点来表示。若某台机器按原创 2013-09-07 21:08:46 · 603 阅读 · 0 评论 -
poj 2553 The Bottom of a Graph(强连通 Tarjan)
题意:在一个有向图中,求出 点v能到达的点都能到达v的一个子图,然后把里面的点从小到大输出,没有的话输出空行。思路:题意很明显,求出强连通分量,缩点后,找出出度为0的点然后保存里面的点。//484K 94MS#include#include#includeusing namespace std;const int VM = 5005;const int EM原创 2013-07-23 12:59:26 · 479 阅读 · 0 评论 -
UVA 539 The Settlers of Catan(图的搜索)
题意:有n个点m条边,求该图的最长一条链。思路:很简单的图的搜索,以每个点为起点都搜一遍过,找出最长的。//0 KB 18 ms#include#include#define M 30struct Edge{ int u,v,nxt;}edge[M*2];int head[M],vis[M*2];int n,m,ep,ans;void addedg原创 2013-07-05 15:04:10 · 586 阅读 · 0 评论 -
UVA 10054 The Necklace(euler)
题意:有一堆散落的项链的的珠子,珠子有可能重复的出现,问我们能否连接成一条项链。每个珠子上头和尾都用颜色(用0~50表示)。思路:这是一个无向图的欧拉回路。在输出欧拉回路前要先判断该图是否连通和是否为欧拉图;因为珠子可以重复出现,不适用表边,用矩阵保存。//0 KB 285 ms#include#includeconst int VM = 55;int vis[VM],mat[VM原创 2013-07-03 17:26:23 · 1059 阅读 · 0 评论 -
poj 2186 Popular Cows(korasaju)
题意:有N头牛 每一头牛都梦想着成为popular cow,(但这是不可能滴) 有m组仰慕的关系,仰慕有传递性比如说A觉得B是popular and B thinks C is popular, then A thinks C ispopalur also;现在问有多少头牛是会被其他牛都仰慕。思路:求强连通分量,缩成点 点内的头当然是相互仰慕的咯!! 然后求新的图 的出度 出度也0的点就原创 2013-04-23 09:24:06 · 422 阅读 · 0 评论 -
poj 3255 Roadblocks (A*)
题意:有N个点 R个路径(双向的) 起点是1,终点是N 求1到N的次短路思路:用的是第k短路算法 A* 具体详解看前一篇 poj 2449 这里就不注释了,都差不多的//2604K 282MS#include #include #include #define EM 100010#define VM 5050const int inf = 0x3f3f3f3f;usin原创 2013-04-23 09:26:28 · 460 阅读 · 0 评论 -
poj 1144 Network(割点)
题意:就要给你一个图,求有多少个割点思路:求无向图的割点,直接上模板没什么好说的,附上两种形式的模板模板1://256K 63MS#include #include #include #define M 110using namespace std;int dep[M],low[M],head[M];bool cut[M];int e,n,rt,son;struc原创 2013-04-23 09:26:32 · 515 阅读 · 0 评论 -
poj 1325 Machine Schedule(匈牙…
题意:有两台机器A and B 它们分别有[0,n) and[0,m)种工作模式,现在K个工作要完成,每个工作能由任一台机器的某个模式完成 刚开始两台机器都工作在0模式(这句话很重要起看漏了这句 悲剧了一下 = =。。。) 每切换一种模式都要重起机器,现要重新分配K个工作完成顺序,使得机器重起时间最少。思路:这题很容易想到二分图的最小点覆盖 要注意的一定的是 刚开始两台机器都工作在0模式原创 2013-04-23 09:27:41 · 428 阅读 · 0 评论 -
poj 2112 Optimal Milking(floyd+…
题意:有K台挤奶机、C头奶牛,以及他们之间距离,每只奶牛都要走到任意一台机器中,每台机器最多为M只奶牛服务,问所有奶牛都完成任务,所走的路程最远的那只奶牛,所走的路程最短可以是多少。思路:floyd + 二分+ 最大流。很容易想到最大流 建立一个超级源点和汇点把挤奶机和汇点连起来 容量为M ,奶牛与源点连起来 容量为1先floyd求出每两个实体间的最小距离 然后二分找出最大//788原创 2013-04-23 09:27:45 · 445 阅读 · 0 评论 -
poj 2455 Secret Milking Machine…
题意:有N个地点,FJ 想从1走到N 每条边只能走一遍 走T次 求在满足条件下,最大的边最小。思路:这题跟 poj 3228 Gold Transportation(二分+最大流)这题差不多,就是用二分求出满足条件下的最小边权 EK超时,此题用sap做的//3212K 797MS#include #include #define VM 210#define EM160010原创 2013-04-23 09:27:56 · 458 阅读 · 0 评论