---------- 图论 ----------
ixRic
ixRic
展开
-
网络流24题
文章目录1. 餐巾计划问题题面分析代码2.[CTSC1999]家园题面分析代码3.航空路线问题题面1. 餐巾计划问题【洛谷1251】餐巾计划问题题面题目描述一个餐厅在相继的 NNN 天里,每天需用的餐巾数不尽相同。假设第 iii 天需要 rir_iri 块餐巾(i=1,2,...,Ni=1,2,...,Ni=1,2,...,N)。餐厅可以购买新的餐巾,每块餐巾的费用为 ppp 分;或者...原创 2020-02-07 12:32:32 · 553 阅读 · 0 评论 -
[HNOI2019] 校园旅行(搜索+二分图性质)
文章目录题目分析代码题目注意数据范围是N≤5000N\leq 5000N≤5000!!分析考虑最plain的DP,dp[u][v]=1/0dp[u][v]=1/0dp[u][v]=1/0表示uuu到vvv是否有一条回文路径,如果dp[u][v]=1dp[u][v]=1dp[u][v]=1,那么dp[x][y]=1dp[x][y]=1dp[x][y]=1(xxx为uuu的邻结点,yyy为vv...原创 2019-11-11 12:21:01 · 226 阅读 · 0 评论 -
[BZOJ 3551][ONTAK2010]Peaks加强版(Kruskal重构树+主席树)
文章目录题目分析代码题目Description在Bytemountains有NNN座山峰,每座山峰有他的高度hih_ihi。有些山峰之间有双向道路相连,共MMM条路径,每条路径有一个困难值,这个值越大表示越难走,现在有QQQ组询问,每组询问询问从点vvv开始只经过困难值小于等于xxx的路径所能到达的山峰中第kkk高的山峰,如果无解输出-1。Input第一行三个数NNN,MMM,QQQ。...原创 2019-11-02 12:04:58 · 239 阅读 · 0 评论 -
Kruskal重构树入门
Kruskal算法众所周知,Kruskal是一种优秀的基于并查集的最小(最大)生成树算法。它的简要流程为:- 将所有边按边权排序;- 依次枚举所有边的两端点u和v,若它们不在一个联通块内,则将该边加入生成树的边集中,且将u、v合并于一个连通块中。Kruskal重构树定义Kruskal重...原创 2019-11-02 11:24:59 · 1141 阅读 · 1 评论 -
[CodeForces 141E]Clearing Up(Kruskal变式)
文章目录题目题目大意分析举个例子原图第一步第二步第三步代码题目Clearing Up题目大意给出一个nnn(1≤n≤1031\leq n\leq 10^31≤n≤103)个点mmm(1≤m≤1051\leq m\leq 10^51≤m≤105)条边的图,每条边有个颜色,要么是S,要么是M,要求一个该图的生成树,使得两种颜色的边各占一半。分析nnn是偶数时无解。举个例子原图原图(红...原创 2019-10-31 12:11:01 · 265 阅读 · 0 评论 -
[CodeForces 723F]st-Spanning Tree(分类讨论+贪心)
文章目录题目题目大意分析代码题目st-Spanning Tree题目大意给出一个nnn(2≤n≤200 0002\leq n\leq 200\ 0002≤n≤200 000)个点mmm(1≤m≤400 0001\leq m\leq 400\ 0001≤m≤400 000)条边的图(连通,无重边,无自环)和s,t,ds,dts,t,d_s,d_ts,t...原创 2019-10-31 11:36:56 · 282 阅读 · 0 评论 -
[CodeForces 700D]Break Up(双连通分量+枚举)
文章目录题目题目大意分析代码题目DescriptionAgain, there are hard times in Berland! Many towns have such tensions that even civil war is possible.There are nnn towns in Reberland, some pairs of which connected by ...原创 2019-10-28 18:29:48 · 366 阅读 · 0 评论 -
[POJ2942]Knights of the Round Table(点双连通分量+染色找奇环)
文章目录题目题目大意分析题目Knights of the Round Table题目大意有NNN个骑士,给出MMM对仇恨关系,若iii与jjj有仇恨,他们就不能在圆桌会议上坐相邻的位置。请你求出有多少个骑士无法参加任何一个圆桌会议(例如但不仅限于,某个骑士与其他所有骑士有仇恨关系,他就不能参加任何一个圆桌会议)。要求每个圆桌会议必须由奇数个人参加。分析考虑原图的补图,即每个骑士可以和哪...原创 2019-10-24 16:15:36 · 343 阅读 · 0 评论 -
[BZOJ3532] Lis(最大流拆点+退流)
文章目录题目分析代码题目Lis分析先做一个最长上升子序列的DP,然后按照转移的父子顺序连边,要拆点,具体来说:所有iii向i′(i+N)i'(i+N)i′(i+N)连容量为BiB_iBi的边;若dp[i]=1dp[i]=1dp[i]=1,SSS向连iii连容量为∞\infty∞的边;若dp[i]dp[i]dp[i]是所有dp[i]dp[i]dp[i]中最大的之一...原创 2019-08-27 11:22:01 · 344 阅读 · 0 评论 -
[HDU6598] Harmonious Army(网络流方程建图)
文章目录题目题意分析代码题目Harmonious Army题意你有n(n≤500)n(n\leq 500)n(n≤500)个士兵,每个士兵需要安排一个职位(法师或战士),另给定mmm对士兵,对于其中的一对ui,viu_i,v_iui,vi,如果都选战士,战队的攻击力会提高aia_iai点(4 ∣ ai4~|~a_i4 ∣ ai);如果都选法师...原创 2019-08-27 10:34:38 · 237 阅读 · 0 评论 -
BZOJ3993 星际战争
3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战。在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai。当一个巨型机器人的装甲值减少到0或者以下时,这个巨型机器人就被摧毁了。X军团有M个激光武器,其中第i个激光武器每秒可以削减一个巨型机器人Bi的装甲值。激光武器的攻击是连续的。这种激光武器非常奇怪,一个激光武器只能攻击一些特定的敌人。Y军团看到自己的巨型机器人被X军团一个一个消灭,他们急需下达更多的指令。为了这个目标,Y军团需要知道X军团最少需要用原创 2019-08-23 16:44:11 · 218 阅读 · 0 评论 -
【NOIP2013模拟】Vani和Cl2捉迷藏
文章目录题目分析代码题目Descriptionvani和cl2在一片树林里捉迷藏……这片树林里有NNN座房子,MMM条有向道路,组成了一张有向无环图。树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔。如果从房子A沿着路走下去能够到达B,那么在A和B里的人是能够相互望见的。现在cl2要在这NNN座房子里选择KKK座作为藏身点,同时vani也专挑cl2作为藏身点的房子进去寻...原创 2019-08-02 08:09:56 · 1582 阅读 · 2 评论 -
COCI2016/2017 Round1T4 Mag
文章目录题目分析代码题目分析既然是乘积,容易想到所选路径上的值不可能很大,所以一般(特殊情况等会讨论)有以下几个结论:最优路径上不可能有点权超过222的结点证明:设当前已找到的乘积为xxx,结点个数为nnn,新加入的点权为y(y>2)y(y>2)y(y>2),则新的路权为xyn+1\dfrac{xy}{n+1}n+1xy,由于y>...原创 2019-07-01 11:20:01 · 351 阅读 · 0 评论 -
COCI2016/2017 Round1T3 Cezar
文章目录题目分析代码题目分析先把单词按给定的顺序排好。然后依次比相邻的两个单词,只要不是包含关系,一定能且只能得到一对字母的大小关系,把大的字母向小的字母连一条边。例如:abc和add,要求替换后abc<add。第一位a是一样的,不论怎么替换都没用,跳过。第二位一个是b一个是d,由于要求替换后abc<add,所以必须保证替换后的b<d。这时把d向b连一条边。...原创 2019-06-24 10:30:26 · 324 阅读 · 0 评论 -
AGC001 Shorten Diameter
文章目录题目题目大意思路代码题目传送门题目大意我们称一个直径不超过KKK的数为好树,给定一个N(N≤2000)N(N\leq 2000)N(N≤2000)个结点的无根树,至少需要删除多少个点,它才能变成一个好树?思路根据树的直径的性质:若KKK是偶数,枚举一个点作为好树的中心,那么这个点到任何一个点的距离都应小于等于K2\dfrac{K}{2}2K,需要删掉的点就是到它距离超过这...原创 2018-10-05 14:35:48 · 326 阅读 · 0 评论 -
【AtCoder】AGC009 Tournament
文章目录题目题目大意思路代码题目传送门题目大意现在需要通过(N−1)(N-1)(N−1)场淘汰赛从NNN个人中选出一个冠军(记为111号),如图所示,由于每个人进行的比赛数可能不同,所以这个比赛是不太公平的。现在告诉你每个人个人最终分别被谁打败了(除了冠军111号),你需要使整个比赛尽可能公平,即:使(理论上)打比赛最多的人打的比赛尽量少,简单来说,就是使你构造出的这个比赛的树深度尽量小,...原创 2018-10-04 08:58:56 · 909 阅读 · 0 评论 -
Splay树
对于被AVL虐得像那啥一样的我们,Splay的到来是无疑是拯(huo)救(shang)人(jiao)民(you)。Splay树,又称伸展树,事实上,它根本就不是平衡树!然而它的平均时间复杂度确是O(log n)。唯一和AVL树一样的是:转转转,转转转……#----------------------------------------------------------原创 2017-03-30 14:00:36 · 1027 阅读 · 0 评论 -
【AVL】宠物收养所
【HNOI2004】宠物收养所时间限制: 5 Sec 内存限制: 128 MB题目描述最近,阿Q开了一间宠物收养所。收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物。每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个原创 2017-03-30 13:07:52 · 1203 阅读 · 0 评论 -
【图】【并查集】无所不在的宗教
问题 B(1354): 无所不在的宗教时间限制: 1 Sec 内存限制: 64 MB题目描述世界上许多不同的宗教,你很难把它们全都记住。你有兴趣找出学生们到底信仰多少种不同的宗教。 已知学校共有N名学生(0 输入输入包括若干个组数据,每组数据格式为: 第1行:2个空格分开的整数N和M 接下来M行,每行2个整数i和j,表示第i号学生与第j号学生信仰相同 输入以2原创 2017-02-18 16:29:11 · 515 阅读 · 0 评论 -
【图论】【二叉树】以先序字符串方式建立二叉树
问题 I(1186): 【基础算法】以先序字符串方式建立二叉树时间限制: 1 Sec 内存限制: 64 MB题目描述输入一个二叉树的先序串,输出其后序遍历结果。如果结点的子树为空,先序串的对应位置为空格符。输入第1行:先序串(结点数≤26,以单个大写字母表示)输出第1行:后序序列样例输入Copy (如原创 2017-01-21 08:27:12 · 1505 阅读 · 0 评论 -
【NOIP普及组】2016模拟考试(10.29)——文化之旅
问题 D: 文化之旅(culture.cpp)时间限制: 1 Sec 内存限制: 128 MB题目描述有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家)。不同的国家可能有相同的文化。不同文化的国家对其他文化的看法不同,有些文化会排斥外来文化(即如果他学习了某种文化,则他不能到原创 2016-11-01 14:09:28 · 706 阅读 · 0 评论 -
【图】【并查集】亲戚
亲戚(relation.cpp)时间限制: 1 Sec 内存限制: 64 MB题目描述若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易。 现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 我们规定:如果x和y是亲戚,y和z是亲戚,那么x和z也是亲戚;如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。输入第一行:三个整数n,m,p,(n原创 2016-10-24 14:08:25 · 2034 阅读 · 0 评论 -
【图】最短路径——Floyed算法和Dijkstra算法
最短路径问题(floyed.cpp dijkstra.cpp)题目描述平面上有n个点(n输入第1行:1个整数n第2..n+1行:每行2个整数x和y,描述了一个点的坐标第n+2行:1个整数m,表示图中连线的数量接下来有m行,每行2个整数i和j,表示第i个点和第j个点之间有连线最后1行:2个整数s和t,分别表示源点和目标点输出第1行:1个浮点数,表示从s原创 2016-10-18 19:25:20 · 2548 阅读 · 0 评论 -
【图】一笔画
一笔画问题(euler-circuit.cpp)题目描述对给定的一个无向图,判断能否一笔画出。若能,输出一笔画的先后顺序,否则输出“No Solution!”所谓一笔画出,即每条边仅走一次,每个顶点可以多次经过。输出字典序最小的一笔画顺序。输入第1行:1个整数n,表示图的顶点数(n接下来n行,每行n个数,表示图的邻接矩阵输出第1行:一笔画的先后顺序,每个顶点之间原创 2016-10-10 13:59:55 · 1479 阅读 · 0 评论 -
【NOIP普及组】2016年模拟考试(9.3)——部落卫队
四、部落卫队(tribe.cpp)【题目描述】原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突。几乎每个居民都有他的仇敌。部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队伍中任何2 个人都不是仇敌。 给定byteland部落中居民间的仇敌关系,编程计算组成部落卫队的最佳方案。【输入】第1行有2个正整数n和m,表示byteland部原创 2016-09-23 13:49:32 · 1161 阅读 · 0 评论 -
【贪心】哈夫曼编码&哈夫曼树
众所周知,计算机以01串来储存和运算。 所以,如果我们想要存一个字符或汉字,例如a,计算机会将它变为一个01串,这个串就是a的编码。如果我们输入了一个词:cat。 如果a的编码是1,c的编码是10,t的编码是11,那么“cat”对应的编码就是“10111”。好了,那么问题来了:10111这个串既是“cat”,也可以理解为“cta”,到底是哪种?如果计算机有庞大的词库原创 2017-10-09 14:03:39 · 1180 阅读 · 0 评论 -
二叉树★DP★二叉树的计数
输入第1行:二叉树的前序遍历顺序 第2行:后序遍历顺序输出第1行:1个整数,表示所有可能的二叉树的数量样例输入ABCCBA样例输出4原创 2017-12-22 13:43:43 · 544 阅读 · 0 评论 -
C++二叉搜索树动图详解
二叉搜索树概念实现数据结构初始化构建新结点插入查找删除查找前驱/后继删除完整代码题目代码二叉搜索树二叉搜索树/排序二叉树/二叉查找树都是一样的。概念二叉搜索树满足这样一个性质: 每个结点有一个关键字keykeykey。 对于结点aaa,它左子树里面所有结点的key&lt;a.keykey&lt;a.keykeykey≥a...原创 2018-07-24 11:41:14 · 894 阅读 · 0 评论 -
C++树的点分治
点分治求树的重心思路模板题模板题大意代码典型例题题目题目大意思路代码点分治树的点分治,是在树中找一个点,把它砍掉后,树就变成了一个森林,然后分别处理这个森林中的每一棵树,统计答案。显然,如果你砍掉叶子结点,这个分治就没有意义了。所以我们要找一个点把树尽可能地平均分,这个点叫树的重心。所谓平均分,就是:这个点的最大子树(包括父亲那边的一堆)的大...原创 2018-07-26 18:04:32 · 566 阅读 · 0 评论 -
多叉树(森林)转二叉树
本来不怎么想写这个,但发现网上的都是“残疾”博客,讲得不是很详细,所以我还是要写一下。 多叉转二叉有“左儿子右兄弟”的说法,然而对于什么都不知道的小白,这句话没有任何用……思路大体就两步,很好理解,如图是用来举栗的多叉树: 兄弟连将所有的兄弟间连一条线,如图: 右子断将所有右儿子与父亲的边删掉,如图: 其他事实上这已经是一棵二叉树了,还有一点小细节。调整层次 很容易发现,“兄弟”(即黄色线原创 2017-04-10 14:11:37 · 10461 阅读 · 6 评论