![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 79
swust_lian
无武
展开
-
HDU 3440 House Man差分约束
题意:在水平坐标轴上给n座房子,房子与相邻房子距离至少为1,房子的高度各不相同, 从最低的房子开始, 每次跳到更高的房子, 跳n-1次最能跳到最高的房子了,但是每次跳跃的距离不能超过d。将这些房子在一维的方向上重新摆放(房子间的相对位置不变) , 使得最矮的房子和最高的房子水平距离最大。分析:高度相近的两个坐标(设为xi,xj)相减 | (xi-xj)| =1, 因为要化为最短原创 2016-01-16 09:30:34 · 541 阅读 · 0 评论 -
HDU 3078 Network (LCA)
题意:有n个点,n-1条双向边,每个点有一个值val,现在有q次询问(op,a,b),if(op==0)将a点的值改成b,否则,求a-->b 间所有点的第k大的值,包括a,b点。解:先求出a,b点的LCA,然后分别从a,b点询问到lca,记录下路径中所有的点,排序即可,修改操作直接修改。 由于tarjan是离线的算法,题中有修改操作,tarjan 不适合使用//RMQ求L原创 2016-02-27 19:51:45 · 344 阅读 · 0 评论 -
HDU 5723 Abandoned country (多校1)
题意:先求最小生成树,然后问你在这个最小生成树中任选两个点,问这两个点之间距离的期望。期望:2*(任意两点之间的距离和)/(n*(n-1))分析:现在关键是求任意两点之间的距离和。我们可以考虑,最小生成树的每一条边对其的贡献,即:u->vv的子节点为cnt个(包括它),那么u即u之上的点数为n-cnt。那么根据排列组合,这条边会用到cnt*(n-cnt)次。dfs一次就可以了。原创 2016-07-23 20:14:33 · 278 阅读 · 0 评论 -
HDU 4179 Difficult Routes spfa存了反向边
题意:输入 n,m,表示n个点m条边。接下来n行输入n个点(编号1~n)的坐标(x,y,z),接下来的m行输入m条边,最后一行输入st,en,d,即求从st->en,难度不超过d的最短距离为多少。所谓难度,假设u->v点,如果v.z>u.z,d=100*(v.z-u.z)/sqrt((u.x-v.x)^2+(u.y-v.y)^2);否则,d=0;思路:难度超过了d的边就不添加,同时记录下刚好为原创 2016-01-15 13:10:08 · 432 阅读 · 0 评论 -
HDU 4725 The Shortest Path in Nya Graph
题意:有n个点,他们属于(1~n)中的某些层,相邻层的费用为c,并且只能相邻层才能相互到达,意思是如果这层没有点,此层的上层的点就不能到达此层的下层点,有m条额外的双向边(u,v)。问(1->n)最短的距离。分析:这道题重在建图。首先应该想到,把层作为一个点(我们用(n-2*n)的点表示层),属于此层的点与它的距离为0,层与层距离为c,额外边直接加就行。建完这个图,我们会发现,在同一层的距原创 2016-08-04 11:38:28 · 218 阅读 · 0 评论 -
POJ 3522 Slim Span
题意:就是求一个生成树,最大边-最小边 最小。这道题挺简单的,居然没几个人做。解:先对边排序,枚举枚举从哪条边开始,求最小生成树,如果有n-1条边构成生成树原创 2016-08-04 13:02:40 · 368 阅读 · 0 评论 -
POJ 2728 Desert King
题意:最优比例生成树。即一条边有两个权值wi,ui,求一棵∑wi/∑ui 最小(最大)的生成树。输出这个最优比例。解:设答案为ans=∑wi/∑ui ,移相得出∑wi-∑ui*ans==0。但是答案未知,所以,我们就能枚举答案。每次重新建图,我们可以得到每条边新的权值wi-ui*ans,然后求最小生成树。如果最小生成树为0,那么答案就得到了。怎么枚举答案呢?二分答案。暴力枚举答原创 2016-08-04 13:36:03 · 221 阅读 · 0 评论 -
HDU 2647 Reward
题意:发奖金,最低是888,有n个人,m条边(u,v)。u的奖金必须大于v。问最少发多少奖金。解:我们建反向边(V,U),即(V比U的奖金少),记录入度。从入度为0的点开始top排序就行了。按照bfs的写法,每次top到下一层,只需要在这层的基础上奖金+1就行了。输出-1的情况,显然是中间出现了环,我们只需要记录,度能为0的个数。为n就输出解,否则为-1.#include #includ原创 2016-08-04 13:47:07 · 205 阅读 · 0 评论 -
HDU 3018 Ant Trip
题意:每条边过且只过一次,问至少要画几笔才能全部边都经过,孤立的点忽视。解:先用并查集把在一个连通图上的顶点并在一起。对于每个联通图,度为奇数点个数为sum,那么需要sum/2笔画。然后把这个连通图标记。其他连通图所有点的度为偶数,只需一笔画。标记此连通图。#include #include #include #include #include #include #原创 2016-08-04 14:13:32 · 259 阅读 · 0 评论 -
POJ 1386 Play on Words
题意:给N个单词,问能不能把所有的单词串起来。模型就是欧拉回路或者欧拉路径。解:只有26中字母,每种字母作为一个点。每个单词的首字母和尾字母连条单向边。如果是欧拉回路,那么所有点的入度等于出度。如果是欧拉路径,那么只有两个点的入度不等于出度,其一是起始点,出度比入度大1,另一个是结束点,入度比出度大1显然,如果给的图由多个连通图构成,显然不能(并查集维护)。接下来就只需判断是欧原创 2016-08-04 14:24:36 · 222 阅读 · 0 评论 -
HDU 3440 House Man
题意:在水平坐标上有N个不同高度的房子,有个人他练习跳跃,他从最矮到高跳跃房子,他每次跳跃的水平距离不超过d。他可以水平移动每座房子,但每座房子不能在一个点,房子坐落的点都是正数点。问最矮的房子离最高的房子最大距离。解:差分约束系统,由于人只能从矮的房子跳到高的房子,并且水平跳跃距离最大为的,设此时坐标为Xi,下次跳跃点坐标为Xj的坐标,|Xi-Xj|由于存在绝对值,不等式就变复杂了,原创 2016-08-04 14:44:31 · 212 阅读 · 0 评论 -
HDU 1068 Girls and Boys
题意:给出n组同学间的关系,找出一个点集,满足这个集合任意两个同学都没有关系。显然是最大独立集问题。分析:由于没有区分男女,我们并出清楚哪些人在X集合,哪些人在Y集合。我们把这N个人都放入X集合,同时也把他们放入Y集合。这就相当于合并了两个二分图。第一个二分图:女生在X集合,男生在Y集合。第二个二分图:男生在X集合,女生在Y集合。我们把这个大的二分图求二分最大匹配。根据:最大独立集=|X|原创 2016-08-04 15:03:52 · 263 阅读 · 0 评论 -
HDU 1281 棋盘游戏
中问题,就不说题意了。解:典型的行列匹配问题。“车”放在同一行或列肯定不行,那么我们抽象出x集合为行号,y集合为列号,由于X集合中顶点不能连边,Y集合中顶点不能连边。只有X集合与Y集合才能连边,那就是二分图咯。。。我们把能放棋的点(i,j)连条边(i->j)。因为对于某一行,它有m列,但是这一行他最多放一个棋子,所以求得最大二分匹配就是能放的最多棋子的数目。第二个问是求哪些是关键点原创 2016-08-04 15:22:07 · 243 阅读 · 0 评论 -
HDU 1350 Taxi Cab Scheme
题意:给出了N趟要去载人的时刻表,有时间,初始地址(a,b),目标地址(c,d),载人花费的时间为|a-c|+|b-d|。如果一辆出租车载完当前的一趟,如果他可以从当前位置赶到某趟的其实位置,并在出发时间前1分钟,那么这辆车就可以载他。问出租车公司至少要派出多少辆车才能完成这个任务。解:由于时间是不能有交的。一辆车按照一个最优的策略,载完这趟就去下趟,才能使得派出的车辆最少。这就和最小路径覆盖原创 2016-08-04 15:55:59 · 241 阅读 · 0 评论 -
HDU 1498 50 years, 50 colors
题意:有50种颜色的气球。放在n*n的矩阵中。有k次操作,每次可以清除一列中相同颜色的气球或一行中相同颜色的气球。问哪些气球不能在k操作后被清除。如果没有输出-1。分析:又是行列匹配的问题。我们可以枚举出现过的每种颜色,建二分图。是不是就转化为求最少的行和列把这种颜色覆盖掉。即最小点覆盖问题。等于二分匹配。#include#include#include#include#inc原创 2016-08-04 16:19:37 · 271 阅读 · 0 评论 -
POJ 2699 The Maximum Number of Strong Kings(最大流)
题意:给n个递增(不降)的分数,即n支队伍比赛所得的分数,赢一场得一分,输不得分,两两比赛。找出最多有多少个king,king的意思是他的分数最高或他打败了所有分数比他高的选手。n分析:主要是建图怎么建,有n个人,比赛场次有n*(n-1)/2,把每个人和每次比赛看作点。源点到人i,建边add(s,i,score[i]),容量为他的分数,比赛场次到汇点t,建边add(j,t,1);题原创 2016-03-11 15:45:41 · 290 阅读 · 0 评论 -
HDU 4587 TWO NODES(割点,连通块,枚举)
题意:给出一个无向图,删除两个点让剩余的图的连通分量的数量最大。思路:先枚举删哪个点,删了后会分成1个或多个连通块。在这些连通块中,考虑再次要删的点,当然是删割点最优啊。删除一个点后,跑cut_bri()的时候记录连通块个数,同时记录其中割点,注意重边多校的题!!#include #include #include #include #include #include原创 2016-03-19 11:34:20 · 422 阅读 · 0 评论 -
HDU 3394 Railway( tarjan)
题意:给一个无向图。如果至少有两个环共用了一些边,那么这些边被认为是“冲突边”。如果一些边不在任何一个环中,这些边被认为是“多余边”。你要找出这个图中有多少“多余边”和“冲突边”然后输出条数。另外这图不一定是连通的,无重边和自环。分析:冲突边:就是找一个点双连通分量,如果此连通分量边数>点数 ,则边数为ans。多余边:桥。#include #include #include #inc原创 2016-03-19 11:32:33 · 374 阅读 · 0 评论 -
POJ 2195 Going Home(KM或费用流)
题意:给一个字符矩阵,m表示man,H表示house。人和房子个数相等。一个房子只能住一个人,要求所有人走到空的房子,每走一步花费1,要求总的花费最小,输出最小值。解法1:KM,给定一个带权的二分图,求权值最大的完美匹配。题意要求总花费最小,用KM只需要把花费弄成相反数(负数),再运行KM算法,求出后结果是一个负的最大值,输出它的相反数就是正的最小了。#include #includ原创 2016-01-20 15:48:33 · 379 阅读 · 0 评论 -
POJ 2391 Ombrophobic Bovines (最大流+二分答案)
题意:有F个牧场,每个牧场当前牛的头数为num,牧场能容纳的牛的头数为rong,牧场与牧场间有P条边,距离为dis,现在所有的牛同时出发,问所有牛到达可容纳的牧场,最短的时间。1=分析:把每个点拆成两个点(i,i‘'),那么设源点为S=0,汇点为T=2F+1。连边add(S,i,numi),add(i'',T,rongi)。由于牛是同时出发,求的是最少时间,所以不是费用流。那么只有二分原创 2016-01-21 16:58:46 · 485 阅读 · 0 评论 -
POJ 1149 PIGS(最大流)
题意:有m个猪圈,初始值为ai头,有n个人来买猪。第i个人他可能打开某些猪圈,并且他最多买num个,他买后,他打开的猪圈里的猪可以随意的移动到打开的猪圈,然后猪圈关闭,第i+1个人又来买。问这n个人最多能买多少头猪。分析:建图:源点到猪圈建边容量为猪的初始头数,人到汇点 建边容量为人最多买的猪的头数。第i个人买猪的时候,再建边(他能打开的猪圈id到他,容量为INF),同时这些能打开的猪圈可原创 2016-01-21 19:29:50 · 349 阅读 · 0 评论 -
poj 3281 Dining(最大流,两种资源一种群体建图)
题意:有F种food,N头牛,D种drink。每种食物或饮料只能供一头牛享用,且每头牛只能享用一种食物和一种饮料。问最多能使几头牛同时享用到自己喜欢的食物和饮料。建图方法:跟常规的建图方式不太一样。现在供应有两种资源,需求仍只有一个群体。其实只要仔细思考一下最大流的建模原理,此题的构图也不是那么难想。最大流的正确性依赖于它的每一条s-t流都与一种实际方案一一对应。那么此题也需要用s-t流将原创 2016-01-22 16:21:54 · 429 阅读 · 0 评论 -
SGU 326 Perspective最大流
题意:NBA某小组内有N支球队,小组内以及小组间已经进行了若干场比赛。现在给出这N支球队目前胜利的场数、还剩多少场没有比(包括小组内和小组间),以及小组内任意两支球队之间还剩多少场没有比,问能否合理安排剩下的所有比赛,使得球队1最后胜利的场数大于或等于最终胜场数最大的球队。分析:这题的建图不好想。首先,最好的策略肯定是让1队赢下所有的比赛,1队的胜场数为tot=已有的胜场+剩下的场数。建图原创 2016-01-23 15:12:39 · 339 阅读 · 0 评论 -
KM
km算法,求完美匹配下的最大(小)权匹配。 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接Xi,Yj有权wij,求一种匹配使得所有wij的和最大。 //O(n^3) hdu 2255//求最大权匹配//若求最小权匹配,可将权值取相反数,结果取相反数/*预处理lx[i]=max(w[i][j]);memset(ly,0,sizeof(ly));所以对于任何边:lx[i]+l[原创 2016-01-24 19:11:25 · 261 阅读 · 0 评论 -
SPOJ 287 Smart Network Administrator(最大流+二分答案)
题意:有N户人,m条街道(边),k户人家需要向1联网(1号有网),通过各个街道连电缆到1。要求这些电缆在同一条街道颜色不同,要求在k户人家连接到的情况下使用最少的颜色,输出最少颜色的种数,题目保证k户人家一定能连上网,边是双向边。分析:原创 2016-01-23 18:34:36 · 614 阅读 · 0 评论 -
HDU 3667Transportation(巧妙的建图,费用流)
题意:有N个点,M条边,现在要将K单位的物品从1运到N,在没条边上只能运ci个单位的物品,并且有一个花费系数ai,即运送x单位花费x^2*ai。问在保证把所有物品运到N点情况下求花费最小,否则输出-1.分析:明显的费用流,但是难点是花费是x^2*ai怎么建图。刘汝佳《算法竞赛入门经典》P.366中讲到,用拆边法。一个费用系数为ai,两个物品通过的话可以拆成1*ai+3*ai,三个物品要原创 2016-01-25 20:56:17 · 434 阅读 · 0 评论 -
HDU 1853 Cyclic Tour(KM或费用流)
题意:有n个点m条边的有向图,一个人可以从一个起点走最终回到起点,每个点只能访问一次。意思是要把这个图分成很多个环,每个点只能属于一个环,求构成这些环的最短路程,若不能满足要求的图就输出-1。解法一:一个人要从起点出发又回到起点,并且每个点只能走一次。这不就是二分匹配问题吗?把每个点拆成两个点i和i'。把i作为二分图左边的点,i'作为二分图右边的点。假设u到v有条边,即左边的u可以和右边的原创 2016-01-27 10:05:17 · 395 阅读 · 0 评论 -
poj3680 Intervals (费用流巧妙的建图)
题意:在实轴上给个N个开区间,每个区间给出一个权值w,要求你选出一些区间(ai,bi)使得这些区间的权值和最大,要求是选出的区间中的每个点不能被覆盖超过k次。(1 【建模方法】经典构图题。先将所有区间端点离散化到整数1..M,另加源s=0,汇t=M+1;对每个点i (0 #include#include#include#include#include#include#i原创 2016-01-27 18:33:52 · 435 阅读 · 0 评论 -
BZOJ 1061 (费用流,填”坑“ )
1061: [Noi2008]志愿者招募Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2874 Solved: 1775[Submit][Status][Discuss]Description申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管。布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短原创 2016-01-28 15:11:10 · 570 阅读 · 0 评论 -
HDU 5619 Jam's store (费用流,建图巧妙)
Jam's store Accepts: 15 Submissions: 42 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)问题描述Jam不好好学习,然后就去帮别人修电脑了,在一家店里,有MM个店员,现在有NN个顾客,给出每个原创 2016-01-31 16:28:56 · 795 阅读 · 0 评论 -
POJ 3728 The merchant (LCA)
题意:有5W个点构成的一棵树,有相应点权(即这个地方此商品的价格),有5w次询问(u,v),每次询问,商人u-->v,能最多赚多少钱。他可以从任意个点买卖。解:离线tarjan+一些处理。首先,要明白tarjan的过程和并查集的过程(说白了就是dfs套dfs),在回溯的过程中处理。对于一个询问, 假设u,v的LCA是f那么有三种可能, 一个是从u到f 买卖了。 一个是从f到v买卖了原创 2016-03-03 19:02:05 · 419 阅读 · 0 评论 -
UVA 11324 The Largest Clique(tarjan有向图强连通+缩点)
题意:给出一个有向图,问最多能有多少点能构成一个集合,这个集合性质是任意两点能相互到达,即u->v or v->y.分析:任意两点能互相到达,而且是有向图,很容易想到是强连通。要使这个集合中的点最多,仅一个强连通分量肯定不行,可由多个强连通分量构成. 那么求出各个强连通分量后,缩点,然后深搜一次,找出最大点集。#include #include #include #inclu原创 2016-03-19 11:30:44 · 337 阅读 · 0 评论 -
HDU 3339 In Action
题意:有n个点,每个点有个能量值,0点为基地,现在要从0点派出坦克取占领这些基地,一个坦克只能占领一个地方,每辆坦克单位距离耗油1个单位。要求花费最小单位的油,占领的地方的能量值大于所有地方能量值和的一半。解:先从0点为起点跑一次最短路记录dis,然后就是0,1,背包啦。就是说,如果要占领i点,那么要花费dis[i],得到val[i]的能量值。背包大小取能量值总和,最后,取找到大于背包一半的最原创 2016-08-04 13:12:55 · 249 阅读 · 0 评论