
图论
文章平均质量分 82
克莉丝汀娜
此时一名自称平民的玩家路过
展开
-
poj 3020 Antenna Placement (最小边覆盖)
题目具体讲什么没怎么看,本质就是说给一个n*m的图,里面有*和o,现在让你用1*2或2*1的矩阵覆盖图中的*,求最少需要多少个。建图:对于相邻的两个*,连一条边,然后将一个*,拆做两个,分别属于X、Y集合,得到一个二分图。对于该二分图,边即代表用来覆盖的矩阵,问题转化为用最少的边覆盖所有的点。对于已经匹配的点,用匹配的边去覆盖就好了。剩下的点个数=顶点总数-最大匹配数*2.各自需要一个原创 2015-07-05 19:29:25 · 459 阅读 · 0 评论 -
poj 3678 Katu Puzzle (2-sat)
题目大意:给出一个含n个点(顶点从0开始编号),m条边的无向图,每条边有一个权值c,取值为0或1,并且每条边对应有一个操作op(and,or,xor),问能否给每一个顶点i一个值Xi,取值为0或1,使得每一条边(i,j,c,op),都有Xi op Xj = c。建图:1、每一个顶点只有两种取值1,0,那么将其拆作两个顶点Ai,Ai+1。2、对于每一条边(i,j,c,op),考虑原创 2015-08-24 22:56:37 · 341 阅读 · 0 评论 -
hdu 1814 Peaceful Commission (2-sat入门)
专题和资料#include#include#include#include#include#includeusing namespace std;#define maxn 20005#define maxm 100005struct Edge{ int to,next;}edge[maxm];int cnt,head[maxn],S[maxn],t原创 2015-08-24 13:53:38 · 309 阅读 · 0 评论 -
uva 3713 Astronauts (2-sat)
n个宇航员,A、B、C分配3种任务,m对关系(i,j)表示宇航员i和宇航员j相互讨厌,二者不能分配同一任务。给出宇航员年龄,设平均年龄为x只有年龄大于等于x的宇航员能够分配A任务,年龄小于X的才能分配B任务,C任务无限制。问能否使得每个宇航员都有任务?输出方案。建图:注意到每个宇航员只有两种任务可选。将每一个宇航员i拆作两个点Ai和Ai+1。Ai+1表示选择任务C,原创 2015-08-24 13:43:41 · 120 阅读 · 0 评论 -
hdu 3622 Bomb Game(2-sat 二分答案)
n个回合,每次给出两个点坐标,要求任选一个。对于选的每一个点确定一个半径作圆,要求面积不能重叠。最终获得的分数为所有圆中半径最小的那个。求:能够获得的最大分数。要让最小半径最大,很自然想到二分。建图:假设答案为D将每一个回合拆作两个点Ai,Ai+1,分别代表每一个回合中要选择的那两个点。对于任意两个回合i,j,如果Ai和Aj的距离Aj+1连一条边。建图后进行SC原创 2015-08-25 10:38:02 · 439 阅读 · 0 评论 -
hdu 2586 How far away ?(离线tarjan求LCA)
n座房子由n-1条道路连接,形成一棵树。给出道路长度,进行m个询问:两个房子间路径长度)树中不存在父子关系,因此建立无向边。选择任意一个结点(房子)作为根节点进行DFS,传入一个参数w表示该结点距离根节点的距离。同时开设一个数组d,用来记录各个结点到根节点的距离。那么对于查询的两个点u,v,其路径长度就等于d[u]+d[v]-d[LCA(u,v)]*2#include#i原创 2015-08-26 18:33:10 · 354 阅读 · 0 评论 -
poj 3648 wedding(2-sat 拓扑排序输出方案)
题意怪怪的,还不给输入规模_(:3 」∠)_,听说数据也是水的。。。。。n对夫妇,从0开始编号,其中0号为新郎和新娘,分别坐在两端。给出m对关系(i,j),i和j不能一起坐在新娘对面,这n对夫妇中任意一对不能坐在同一端。输出与新娘在同一端的其他n-1个人。建图:首先将0(新娘)和新郎(1)连一条边,表示新娘和新郎必须坐在不同端。然后对于关系(i,j),连接 2i->2j+1,2j-原创 2015-08-25 19:32:52 · 664 阅读 · 0 评论 -
hdu 5285 wyh2000 and pupil
和hdu 4751类似。判断是否是二分图就好了,同时统计一下两组的人数,要使第一组的人数尽可能大,每次染色的时候取较大值相加即可。坑点:1、n2、m=0的情况#include#include#include#include#includeusing namespace std;vectorG[100005];int color[100005]原创 2015-07-18 22:40:52 · 436 阅读 · 0 评论 -
poj 1330 Defragment (最近公共祖先)
给出一棵树的父子关系,求指定的两个结点的最近公共祖先。关于最近公共祖先(LCA)的资料如下:资料1LCA问题的tarjan算法由于存在父子关系,因此建图的时候建立的是有向边,在进行dfs前,需要找到根节点(入度为0),从该结点开始DFS。#include#include#include#include#include#include#incl原创 2015-08-26 18:25:36 · 412 阅读 · 0 评论 -
LCA倍增法
LCA-倍增法(在线)O(nlogn)-O(logn)1. DFS预处理出所有节点的深度和父节点inline void dfs(int u){ int i; for(i=head[u];i!=-1;i=next[i]) { if (!deep[to[i]]) { d转载 2015-08-28 09:28:27 · 443 阅读 · 0 评论 -
hdu 2874 Connections between citie(离线tarjan求LCA 前向星)
给一个森林,询问某两点之间的路径长度。由于所给图不存在父子关系,因此根据输入建立无向边。任选一个未访问的顶点作为某棵树的根节点开始进行DFS,注意DFS前vis数组必须清0。为什么选择前向星?因为用vector邻接表会爆内存。#include#include#include#include#include#include#include#include原创 2015-08-27 10:05:20 · 419 阅读 · 0 评论 -
uva 11324 the largest clique (2-sat 二分答案)
n架飞机,有早、晚着陆两种方式选择。让你安排着陆方式使得相邻两个着陆时间间隔的最小值尽量大。求该最大值。建图:每架飞机i的两个着陆时间视为两个点Ai、Ai+1设最后答案是T,那么当对于两架飞机,若Ai-Aj Aj+1连一条边二分答案,再按照上面方式建图求解即可。时间复杂度为O(n^2logT)#include#include#include#inc原创 2015-08-24 15:22:46 · 335 阅读 · 0 评论 -
hdu 4751 Divide Groups (二分图判断)
给出n个人,以及相互之间的关系。问能否分成两组,使得组内的人两两都互相认识。对于不相互认识的两个人之间连一条边,表示该两人不能分在同一组,然后判断是不是二分图就好了。#include#include#include#include#includeusing namespace std;bool Map[105][105],r[105][105];int n,c原创 2015-07-16 18:32:59 · 578 阅读 · 0 评论 -
hdu 4685 Prince and Princess(完美匹配+SCC缩点)
题目大意:n个王子与m个公主进行匹配,要求给出每个王子可以匹配的公主列表,列表中的公主应当满足:与该王子匹配后,最大匹配数目能够保持不变。分析:此题是poj 1904的加强版。虽然题意有所不同,但仍然可以参考那题的建图方式。首先,需要搞清楚:为什么可以利用完美匹配来建图,或者说为什么这样建图是正确的?设王子Xi与公主Yi匹配,王子Xj与公主Yj匹配,同时Xi还喜欢Yj,问题的关原创 2015-07-05 07:52:49 · 573 阅读 · 0 评论 -
poj 2117 求割点+联通分量个数
p个点,c条边的无向图中求去掉1个点后最多形成的连通分量个数。1、若c=0,结果即为p-12、否则,结果为初始连通分量个数+最大割边数#include#include#include#include#include#include#include#include#includeusing namespace std;typedef unsigned __int64原创 2015-06-15 10:50:47 · 448 阅读 · 0 评论 -
poj 1325 Machine Schedule (最小点覆盖)
题目大意:两个机器A、B有各种工作模式0,1,2,……。初始都处于0模式。每切换一次模式需要重启一次机器。现在给你k个任务,给出它们分别在A、B中工作的模式,让你合理安排使得重启机器次数最少,完成所有任务。输出最少次数即可。建图:对于一个任务,要么在A中以x模式工作,要么在B中以y模式工作。于是可以将所有机器视为一条边,改边的两个点x、y分属于两个不同的集合,由此得到一个二分图。机器执原创 2015-07-05 16:17:08 · 360 阅读 · 0 评论 -
uva 3126 出租车 (最小路径覆盖)
给出m个客人的行程。问最少需要的出租车数量。模型:最小路径覆盖:用最少的路径覆盖所有点(客人)建图:如果接完上一个客人u能够来得及接下一个客人v,则u到v连一条有向边,由此得到一个DAG图。然后将每个客人拆为两个点X、Y,如果X1->X2有边,则X1->Y2连一条边,以此得到一个二分图,然后求最大匹配。性质:最小路径覆盖数=原图顶点数-二分图最大匹配。(二分图中每有一个原创 2015-07-03 20:58:48 · 385 阅读 · 0 评论 -
hdu 3861 The King's problem(SCC缩点+最小路径覆盖)
题目大意:给出一个n个顶点、m条边的有向图。要求将其划分为最小的区域。要求:1、对于两个点,若互相可达,则属于一个区域。2、对于某1个点,只能属于特定的一个区域,不能同时属于两个不同的区域。3、若顶点u可达v,则u与v可以属于一个区域。分析:由条件1:一个SCC属于一个区域。因此进行SCC缩点,缩点后得到一个DAG图。考虑条件3:对于得到的DAG图,如果从u->v有一条路径,则原创 2015-07-05 22:28:36 · 483 阅读 · 0 评论 -
sdut 3262 Circle of Friends (SCC缩点)
题目大意:n个人,从0开始编号,m个关系:表示前者认识后者,若前者认识后者,则前者可以向后者请求帮忙,若后者不认识前者,则前者需要请后者吃顿饭,否则不用。现在编号为0的人要向编号为n-1的人请求帮忙,问至少要请吃多少顿饭?若不能像第n-1个人请求帮忙,输出-1(某人只会向其认识的人请求帮忙,若A认识B,B认识C,则A也可以通过B向C请求帮忙。能够互相请求帮忙的可以缩成一个点,然后DFS原创 2015-07-25 09:14:26 · 677 阅读 · 0 评论 -
uva 3353 Optimal Bus Route Design (费用流/KM)
题目大意:n个点,问能否找出若干个圈,使得所有的点都在某个圈上且一个点只能属于一个圈。若能,求最小花费。法一:最佳完美匹配(KM算法)每个点都属于一个圈,则每个点的后继唯一确定,由此拆点构图,为每个点寻找匹配的后继使得花费最小。法二:费用流同样根据每个点的后继唯一确定的性质来建图:1、将每个点拆为两个点,分别编号为1~n、n+1~n+n。2、根据输入原创 2015-08-22 16:18:25 · 392 阅读 · 0 评论 -
uvalive 2957 Bring Them There(最大流)
题目大意:n个星球,编号为1~n,m条双向通道,任意两个星期之间最多只有一条通道。现有k个计算机从S送往T,每条通道每次只能送一台计算机,花费1天。问最少需要多少天才能把k个计算机全部从S送到T。题目保证有解。一、建图:1、将N个星球作为点,拆为T+1个点,u0,u1,u2,……uT,ui表示在第i天时的星球u2、ui到ui+1连一条边,容量为无穷。这样可以使前一天原创 2015-08-23 20:18:40 · 740 阅读 · 1 评论 -
UVA 11248 Frequency Hopping (最大流)
有向图,问是否存在一个从1到n,流量为C的流,若不存在,能否修改某一条边的容量,使其存在。先求一下最大流,看最大流是否至少为C。然后每次修改一条满容量的边,使其容量增加到C,再看最大流是否至少为C。两个优化:1、将上一次增广后的流量保留下来,在此基础上增广。2、每次无需将最大流求出,只要当前流量大于等于C即可。#include#include#include#原创 2015-08-23 20:29:33 · 346 阅读 · 0 评论 -
poj 3207 Ikki's Story IV - Panda's Trick( 2-sat判定性问题,SCC缩点)
题目很难读懂。大致是说一个圈上顺时针地放了n个点,然后告诉你已经用线连接的m对顶点(不相交),可以从圈内部连接,也可以从外部,可以是直线,也可以是曲线。问能否使得这m条线不相交。建图:1、一条线,要么在圈内部,要么在外部。于是可以考虑将m条线拆作2*m个点,对于第i条线,拆作Ai,Ai+1两个点,分别表示内部、外部。2、对于两条线i,j,如果是交叉的(即其中一条线的端点原创 2015-08-24 19:12:51 · 346 阅读 · 0 评论 -
hdu 5423 Rikka with Tree
问题描述众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:对于一棵树TTT,令F(T,i)F(T,i)F(T,i)为点1到点iii的最短距离(边长是1). 两棵树AAA和BBB是相似的当且仅当他们顶点数相同且对于任意的iii都有F(A,i)=F(B,i)F(A,i)=F(B,i)F(A,i)=F(B,i).两棵树AAA和BBB是不同的当且仅当他们原创 2015-08-29 21:59:44 · 675 阅读 · 0 评论 -
hdu 5424 Rikka with Graph II (哈密顿路判定)
给一个n条边,n个顶点的图,判定是否存在哈密顿路。如果存在哈密顿路,此时路径中含有n-1条边,剩下的那一条要么是自环(这里不予考虑,因为哈密顿路必然不经过),要么连接任意两个点。不考虑自环,此时图中的点度数为1的个数必然不超过2个,有如下三种情况:1、剩下的那条边连接起点和终点,此时所有点度数都是2,可以从任意一个顶点开始进行DFS,看能否找到哈密顿路2、剩下的那条边连接除起点原创 2015-08-29 22:23:32 · 1148 阅读 · 0 评论 -
Edmonds-karp算法详解
最近大三学生让我去讲课,我就恶补了最大流算法,笔者认为最重要的是让学弟学妹们入门,知道算法怎么来的?为什么是这样?理解的话提出自己的改进,然后再看看Dinic、SAP和ISAP算法…..一、概念引入 首先要先清楚最大流的含义,就是说从源点到经过的所有路径的最终到达汇点的所有流量和。 流网络G=(V,E)是一个有向图,其中每条边(u,v)∈E均有一个非负容量c(u,v转载 2015-07-23 08:55:27 · 8656 阅读 · 0 评论 -
CCF 201403-4 无线网络 (二维最短路)
问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立网络连接。 除此以外,另有 m 个可以摆放无线路由器的位置。你可以在这些位置中选择至多 k 个增设新的路由器。 你的目标是使得第 1 个路由器和第 2 个路由器之间的网络连接经过尽量少的中转路由器。请问在最优方案下中转路由器的最少个数是多少?原创 2015-09-04 20:20:05 · 3831 阅读 · 11 评论 -
CCF 201503-4 网络延时 (树的直径)
问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机、交换机与电脑之间使用网络连接。交换机按层级设置,编号为1的交换机为根交换机,层级为1。其他的交换机都连接到一台比自己上一层的交换机上,其层级为对应交换机的层级加1。所有的终端电脑都直接连接到交换机上。 当信息在电脑、交换机之间传递时,每一步只能通过自己传递到自己所连接的另一台电脑或交换机。请问,电脑与电脑之间原创 2015-09-04 20:24:16 · 2734 阅读 · 2 评论 -
hdu 4280 Island Transport (最大流)
题目大意:一些岛屿,之间有一些航线(双向的),除了起点(最西边那个)和终点(最东边那个),航线不相交。已知每条航线的客流量的上限,问到从起点到终点最大的客流量。裸的求最大流的问题。数据规模比较大。用了递归的Dinic,人工扩栈后c++提交,压着时限过了。#include#include#include#include#include#inclu原创 2015-08-10 22:32:07 · 402 阅读 · 0 评论 -
uva 3353 Optimal Bus Route Design(费用流)
题目大意:无向图,从点1到点n,再从n回到1,边不能重复访问,求最小距离。分析:由于是无向图,因此,从n到1,可看作从1到n。一开始想到求两次最短路,然后发现是行不通的。因为第一次求出最短路之后需要将最短路上的边去掉,然而去掉之后可能会造成不再存在1到n的路径了,而实际上原图中是存在两条由1到n的边不重复的最短路的。比如一个有一条对角线的矩形,起点和终点分别为非对角线上的两个点,第一次求出原创 2015-08-21 15:53:18 · 109 阅读 · 0 评论 -
poj 2516 Minimum Cost (费用流)
N个店主,M个供应商,K种商品,已知供求关系以及商品的运费,问能否满足需求,若能,求最小花费。一、关于能否满足需求:直接根据输入进行判定即可。二、在能满足需求的条件下,考虑某一种商品,即若只有一种商品,可以这样来建图: 1、将店主、供应商都视为1个点。店主编号为1~N,供应商为N+1~N+M 2、添加源点0,到所有店主连一条边,花费为0,容量为该商品原创 2015-08-22 13:24:45 · 372 阅读 · 0 评论 -
poj 1273 Drainage Ditches(网络流入门之最大流)
题目大意:m个池塘,n条水渠(单向导通),池塘从1到m编号,1号是源点,m号是汇点,。已知各条水渠的最大输送水的速率,求单位时间内流经m号池塘的最大流量。法一:Edmonds-Karp算法该算法是通过BFS来寻找从源点到汇点的增广路径,不断更新残留网络来求出最大流。有关该算法的详解:Edmonds-Karp算法详解其时间复杂度为O(NM^2)#include#in原创 2015-08-09 22:59:59 · 551 阅读 · 0 评论 -
CCF 201412-4 最优灌溉(MST)
问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利用部分麦田作为“中转站”,利用水渠连接不同的麦田,这样只要一片麦田能被灌溉,则与其连接的麦田也能被灌溉。 现在雷雷知道哪些麦田之间可以建设水渠和建设每个水渠所需要的费用(注意不是所有麦田之间都可以建立原创 2015-09-06 16:32:57 · 962 阅读 · 0 评论 -
hdu 5296 Annoying problem (LCA)
题目大意:给一棵带权树,和一个集合S,初始为空。现有两种操作:1、选择某个顶点加入S2、将S中某个顶点去掉。问:每次操作后,使得集合S中的点联通的最小边权和是多少。以上是官方题解。问题是为什么可以根据DFS序找两个点?这样做的原理是什么?这是问题的关键,然而题解并没有给出相应的说明。观察一棵树中顶点的DFS序,发现有如下特点:原创 2015-10-06 16:54:04 · 593 阅读 · 0 评论 -
hdu 5438 Ponds(toposort+DFS)
给一个无向图,将图中与其关联的边数小于2的点去掉,直到找不到这样的点为止,然后求奇圈的权值和。类似拓扑排序将度数小于2的点给去掉,然后剩下的点必然组成若干个圈,通过DFS标记边的同时统计顶点个数。若为奇圈,累加权值即可。注意数据范围啊。#include#include#include#include#include#include#includeusi原创 2015-09-13 20:02:51 · 412 阅读 · 0 评论 -
poj 3680 Intervals (离散化+费用流)
n条线段,带有权值。选择其中若干条,使得权值最大且每个端点覆盖次数都不超过K次。建图:1、将输入的顶点离散化。设总共不同的顶点个数为n。2、将顶点i到i+1连一条容量为K,费用为0的边。3、新建源点0和汇点n+1,顶点0到1、顶点n到n+1分别连容量为K,费用为0的边。4、对于每个区间的两个端点,连一条容量为1,费用为-w的边。5、求最小费用最大流,得到的费原创 2015-09-18 22:38:48 · 451 阅读 · 0 评论 -
ISAP算法详解
求解最大流问题的一个比较容易想到的方法就是,每次在残量网络(residual network)中任意寻找一条从 s 到 t 的路径,然后增广,直到不存在这样的路径为止。这就是一般增广路算法(labeling algorithm)。可以证明这种不加改进的贪婪算法是正确的。假设最大流是 f ,那么它的运行时间为 O( f⋅∣E∣) 。但是,这个运行时间并不好,因为它和最大流 f转载 2015-08-19 17:28:27 · 1915 阅读 · 0 评论 -
sgu 185 Two shortest(最短路+最大流)
一开始读错题啦,以为是求所有的最短路。原来是求边不重复的最短路条数。这样的话就和hdu 3599一样一样的了。建图:点击打开链接唯一不同的是,需要输出两个方案来。那么就作两次DFS就好了,第一次DFS访问时,同时将边给删掉。#include#include#include#include#include#include#include#incl原创 2015-08-19 17:17:47 · 406 阅读 · 0 评论 -
poj 3436 ACM Computer Factory (最大流)
题意很复杂。。大意:n个机器生产电脑,电脑有p个部件。每台机器能够将含某些部件的电脑转换为含另一些部件的电脑。已知各个机器的最大生产速率以及转换条件,0表示该机器不需要该部件,1表示需要,2表示可有可无。问怎样安排流水线生产,使得生产速率最大。一、建图:1、将每个机器视为一个点。2、添加一个源点,转换条件及产出均为0;添加一个汇点,转换条件及产出均为1.3、对于原创 2015-08-14 17:16:43 · 393 阅读 · 0 评论 -
hdu 3078 Network (LCA转RMQ)
题意:n个结点形成一棵树,每个结点有一个权值,两种操作:一、改变某个结点的权值。二、查询结点u到结点v的路径上第k大的权值。由于牵涉修改操作,因此不便用离线tarjan来做,这里采用LCA转RMQ的方法来求LCA。关于LCA与RMQ的相互转换建树之后DFS求出各个结点的深度dep、欧拉序列E、第一次在欧拉序列中出现的位置pos、以及前驱结点pre。然后可转化为RMQ原创 2015-08-29 14:51:02 · 512 阅读 · 0 评论