
——图论——
QAQQQQQQQQQQQ
菜
展开
-
二分图染色
luogu1525 关押罪犯 可以用并查集 也可以用二分图染色+二分答案 每次找到一个怒气值将比此怒气值大的连个点连边 然后dfs染色 如果二分图染色合法则此怒气值可行 做法如下:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#def...原创 2018-03-08 13:08:00 · 342 阅读 · 0 评论 -
NOIP 2016 D1T2 天天爱跑步
一个树上神题··· 我还不是特别懂 大概就是开个桶 (桶大概就是以权值为下标的数组) 然后把路径分成向上到lca的,从lca向下的 然后判断一下lca什么什么的可以参考大神的blog https://www.cnblogs.com/ljh2000-jump/p/6189053.html 可以说讲的非常详细了#include&lt;iostream&gt;#include&l...原创 2018-07-11 20:27:42 · 191 阅读 · 0 评论 -
记搜、最短路--NOIP2017 逛公园
luogu3953solution: 一开始看到的时候最短路计数的时候还疑惑了一下 因为之前做的只有最小生成树计数,图上路径计数怎么搞啊 然后感觉是类似搜索的东西可以搞一搞 忍不住看了下标签:记忆化搜索 嗷!原来这样 但是一开始定义的f数组是一维的只记录点 但是立马就发现这样不行了 因为一个点可能有多种路长 但是路长太长了没法记啊所以我们应该要记比最短路多出去的那一部分呀...原创 2018-07-24 11:54:35 · 458 阅读 · 0 评论 -
贪心、树的重心--CF708C
题目大意: 给定一棵n 个结点的树,对于每个结点求出它是否能通过至多一次操 作,使其成为这棵树的重心。一次操作可以删去原树中一条边,然后再 连上任意一条边,要求操作后图仍是一棵n 个结点的树solution: 操作实际就是选择一个子树然后将其换个父亲 对于一个非重心结点u,它有且仅有一个儿子的子树大小大于n/2 贪心地从这个子树中找出一个尽量大且大小不超过n/2 的子树,使u成为它...原创 2018-07-18 20:26:15 · 447 阅读 · 0 评论 -
最小生成基环森林--bzoj4883: [Lydsy1705月赛]棋盘上的守卫
传送门solution: 左右两排点,i向j+n连w[i][j]最小生成基环森林每个边属于一个点,每个点占有一条边用hv数组记录当前联通块里是否有环 如果这条边连的两点在一个联通块内,并且无环,将这条边加入如果两点不在,且两个联通块不会同时有环,将这条边加入 图论中比较难的就是建图转化了,像这道题中一行一列都必须对应一个不同的守卫,可以转化为一个边对应一个点,而...原创 2018-08-20 21:27:25 · 490 阅读 · 0 评论 -
带限制的最短路--bzoj1922: [Sdoi2010]大陆争霸
传送门solution:带限制的最短路,可以用dijkstra或者spfa实现,只需在更新加入队列的时候稍作改动dis为到达的最短时间,d为摧毁所有结界时间,则真实时间为两个值取max要用这个max去更新其他点dijkstra更新dis的时候,只有当v的结界全部被摧毁才进堆。同时将所有结界发生器在当前点的点的结界数量--,如果减为0,进堆。注意只有这个点出队的时候才说明...原创 2018-08-20 21:33:39 · 388 阅读 · 0 评论 -
图论、建图--bzoj1539: [POI2005]Dwu-Double-row
传送门纯思路题···两个相同的身高,如果在同一行,就给这两列之间连边权为1的边,如果不在就连边权为0的边代表要反转几次然后dfs染色,权值为1的边两边的颜色不同,权值为0的边两边颜色相同每个联通块取点数小的颜色加入答案中 还有一些细节问题什么的代码如下:#include<iostream>#include<cstdio>#inclu...原创 2018-09-01 15:36:26 · 215 阅读 · 0 评论 -
思路题(二分答案+并查集/最小生成树/SPFA)--luoguP2498 [SDOI2012]拯救小云公主
传送门一道图论思路题一开始想到了二分答案+并查集期望得分是70,但卡卡就过了http://www.cnblogs.com/ppprseter/p/9301627.html几种正解都在这,写的很详细我懒得写了 嗯就这样放上我的SPFA代码:#include<iostream>#include<cstdio>#include<algo...原创 2018-09-13 00:25:37 · 238 阅读 · 0 评论 -
BFS+SPFA-NOIP2013 华容道
luoguP1979思路挺难想的,一开始想着要以每个点预处理再SPFA,但是这样会很麻烦,而且会出问题因为空格子在每个点的不同方向都是不一样的,所以我们考虑把状态抽象成点,用一个三维数组储存id[i][j][k]表示空格在(i,j)的k方向我们可以处理出状态之间的步数,可以用bfs做到状态之间连好边,每次询问的时候设置一个起始状态和终止状态,将他们分别连向可转移的状态具体看...原创 2018-09-26 17:43:03 · 185 阅读 · 0 评论 -
差分约束
以前学过但是现在忘了重新学一遍qwqqwqqwq就是用图论的思想来解决一些不等式求解问题形如f[i]−f[j]≤a[k]f[i]-f[j]\le a[k]f[i]−f[j]≤a[k]的一些不等式,可以看成f[i]≤f[j]+w(j,i)f[i]\le f[j]+w(j,i)f[i]≤f[j]+w(j,i)从jjj到iii连一条边权为a[k]a[k]a[k]的边把求f[n]−f[0]f[n]...原创 2018-10-18 09:49:45 · 117 阅读 · 0 评论 -
倍增+Floyd最短路--luoguP1613 跑路
传送门看到2k2^k2k就是妥妥的倍增qwqqwqqwq,但是一开始的时候倍增数组设成了g[i][j]g[i][j]g[i][j]表示从iii走2j2^j2j步到的点,这样的话是有问题的,因为之前走过的点可能会被覆盖掉,在之后它就遗失了所以要设g[i][j][k]g[i][j][k]g[i][j][k]表示从iii到jjj走了2k2^k2k步是否可达然后可以用floydfloydfloyd最...原创 2018-10-15 16:16:30 · 156 阅读 · 0 评论 -
DP+SPFA--luoguP4042 [AHOI2014/JSOI2014]骑士游戏
传送门很容易写错的题!设f[i]f[i]f[i]表示彻底消灭iii这个怪兽需要消耗的最小体力可以观察到普攻iii以后变出来一些小怪兽,相当于一个有向图如果是DAGDAGDAG就可以直接dpdpdp了,但他不是!所以要用spfaspfaspfa反复松弛!说到spfaspfaspfa松弛,一般的松弛都是松弛去点,一开始想的松弛始点,结果复杂度爆炸(其实可以卡过去),其实正解是建反边然后用小怪...原创 2018-10-28 19:53:34 · 157 阅读 · 0 评论 -
建模转化最短路--CF37E.Trial for Chief
题目大意: 把一块大小为M*N的白木板的某些格子涂成黑色 每次可选一个联通块,全涂白或者全涂黑,问最少涂几次solution: (非常巧妙的建图)??? 每个点与周围颜色相同的格子连边权为0的边 每个点与周围颜色不同的格子连边权为1的边 求每个点到最远的黑格子的最短路,取min+1就是答案但实际操作时考虑会有全部是白色 可以是到黑色+1,到白色不+1#include&...原创 2018-07-09 08:59:38 · 237 阅读 · 0 评论 -
树的直径综合--CH Adera6C
题目描述Rainbow所在学校的网络中有n台计算机,由n-1条电缆相连(即构成树形)。其中第i条电缆连接ai、bi两台计算机,传输时间为ti。当然,网络中任意两台计算机a、b传输数据所需时间就是a到b的路径上所有电缆的传输时间之和。网络的效率关键在于传输时间最长的两台计算机之间传输数据所需要的时间,记为μ。现在Rainbow所在的学校要对网络进行升级,升级的目标就是减小μ的值。对于第i条电...原创 2018-07-08 18:17:24 · 312 阅读 · 0 评论 -
倍增lca--luogu3013货车运输
突发奇想写博客233倍增lca。 先预处理出一个二维数组,f[x][i]表示x节点的2^i的祖先是谁 在树上dfs出各个点的深度顺便求了f 在找lca的时候 先把两个点调整到一个深度 如果调整完已经到同一个点上就退出 如果没有就开始往上跳 从最大的开始跳 直到跳到相同的点 然后顺便更新res的值 还有这道题要先求最长路建一颗树··粘代码#include<i...原创 2018-04-02 23:39:04 · 153 阅读 · 0 评论 -
图论最短路spfa--poj3013Big chrismas tree
这道题可以转换成 以1为源点求最短路 答案就是点权*disspfa 用的bfs 直接粘代码好了#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#...原创 2018-04-03 00:12:28 · 102 阅读 · 0 评论 -
bzoj2750 [HAOI2012]Road
DescriptionC国有n座城市,城市之间通过m条单向道路连接。一条路径被称为最短路,当且仅当不存在从它的起点到终点的另外一条路径总长度比它小。两条最短路不同,当且仅当它们包含的道路序列不同。我们需要对每条道路的重要性进行评估,评估方式为计算有多少条不同的最短路经过该道路。现在,这个任务交给了你。Input第一行包含两个正整数n、m 接下来m行每行包含三个正整数u、v、w,表示有...原创 2018-04-11 00:06:53 · 198 阅读 · 0 评论 -
poj 3635 Full Tank? 图上dp
DescriptionAfter going through the receipts from your car trip through Europe this summer, you realised that the gas prices varied between the cities you visited. Maybe you could have saved some mon...原创 2018-04-11 13:26:04 · 190 阅读 · 0 评论 -
tyvj P1659 - 中中救援队 (最小生成树)
咳咳,一道最小生成树的水题两点的边权为两个点+距离*2 因为最小生成树无环 一条边走两次然后用克鲁斯卡尔就行直接贴代码:#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define N 10005#define M 100005u...原创 2018-04-12 00:04:49 · 234 阅读 · 0 评论 -
最小及次小生成树
poj1679 the unique MST一道裸的次小生成树思路就是先求出最小生成树然后枚举没有用过的边减去环中最大的边求次小生成树附代码:#include<iostream>#include<cstdio>#include<cstring>#define maxn 105#define INF 0x3f3f3f3fusing namespace std;in...原创 2018-01-03 00:08:32 · 170 阅读 · 0 评论 -
poj 1135Domino Effect 最短路
一道最短路的题 题目大意:有一堆多米诺骨牌,有n个关键点,有m条路,对于m条路,输入a,b,c表示从a推到b需要耗时间c。问从1号关键点开始推将所有多米诺骨牌都推倒需要耗费多长时间。遍历一遍dis【i】,找到最长路设定为maxn,记录对应节点。遍历所有边,在这条边中有这样三条信息:dis【u】,dis【v】,w【u,v】。我们知道,分别代表:从节点1最快速度推到节点u的时间,从节点1最快...原创 2018-04-06 22:16:08 · 219 阅读 · 0 评论 -
图论spfa--luogu1073最优贸易
题目描述C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1 条。C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。...原创 2018-05-23 23:36:11 · 156 阅读 · 0 评论 -
多源BFS--CF986A
题目大意: n个点m条边,边权为1,d(u,v)=u,v最短路 P(u)每个点产生的物品已知,找s个点是p两两不同 并且找到最短的一条路solution: 多源bfs,每种货物分开做,把所有生产第i种的点入队做bfs 得到每个点距离每种货物最短的距离 排序把前s小的加起来#include<iostream>#include<cstdio>#inclu...原创 2018-07-08 11:55:09 · 667 阅读 · 0 评论 -
建图、dfs求联通块--CF986C
题目大意:给定m个0 ~2^n-1之间的整数,分别代表一个点 X,y间 有无向边当且仅当x&y=0 求有多少个联通块 N不大于22solution:x&y太多了,先考虑x&y=0的y是什么结构,不断填上未知的位将每个数拆成x和x’,从x到(~x)’连有向边从x’到(x’ xor 1<<k)’连有向边(k为所有是1的点)若x属于输入的m个数...原创 2018-07-08 11:59:21 · 290 阅读 · 0 评论 -
树的直径--Cf GYM 100781A
题目大意: 给出若干棵树,用最少的边把它们连成一张无向连通图,同时使图的直径最小solution: 求每个树的直径,直径的中心相连,菊花形,把其他树的直径中点连到半径最大的树的直径中点上 根据连接情况讨论计算图的直径答案有三种:第一种是添加了边之后,树的最长路径还是原来子树的路径,第二种是对子树长度进行排序后,两个最长的距离分别除以2向上取整后加上1。第三种比较难注意到,就是第二第三...原创 2018-07-08 12:01:32 · 290 阅读 · 0 评论 -
set+LCA--luoguP3320 [SDOI2015]寻宝游戏
传送门说是虚树…其实也没真正用到虚树因为他最后要走回去,所以每条边都会经过两遍,选哪个点都无所谓,所以可以按照dfsdfsdfs序排序,加入一个新点的时候就把前驱后继的距离减掉再加上它到前驱和它到后继的距离,这个求一下lcalcalca就行,删掉点就是反过来。一开始setsetset写的不太好rerere了,注意判一下它没有前驱或者后继的情况代码如下:#include<iostre...原创 2019-01-15 14:37:55 · 321 阅读 · 0 评论