随笔分类 -  图论

摘要:题目链接 D: 看样例+分析得知,假设现在要选$i$个,那么能达到的最大的值就是$sum_=\sum^$, 最小值就是$sum=\sum^$,那么每次可选择的数量就是$sum_1-sum_2+1$,那么答案就为$\sum^{n+1}({sum_-sum_ + 1})$ #include<bits/s 阅读全文
posted @ 2020-06-07 18:44 GRedComeT 阅读(140) 评论(0) 推荐(0)
摘要:题目链接 C: 本题可以直接暴力求解,类比八皇后问题,使每个点分别对应一个值,分别判断有几条边能够满足即可 #include<bits/stdc++.h> using namespace std; #define ms(x,y) memset(x, y, sizeof(x)) #define low 阅读全文
posted @ 2020-06-05 20:37 GRedComeT 阅读(125) 评论(0) 推荐(0)
摘要:题目链接 B: 边最少点最多的方式是2个点一条边,不连通,边最多点最少的方式是完全图,边数为$n*(n-1)/2$ #include<bits/stdc++.h> using namespace std; #define ms(x,y) memset(x, y, sizeof(x)) #define 阅读全文
posted @ 2020-06-01 14:59 GRedComeT 阅读(114) 评论(0) 推荐(0)
摘要:题目链接 D: 将第一种关系建图,求出图上每个点,满足不相邻但可达且不含第二种关系的点的数量,直接建图,注意减数量的时候不要重复即可 #include<bits/stdc++.h> using namespace std; #define ms(x,y) memset(x, y, sizeof(x) 阅读全文
posted @ 2020-06-01 14:48 GRedComeT 阅读(111) 评论(0) 推荐(0)
摘要:"题目链接" 题意:给你一张图和一条路径,沿着这条路径走,若走到某个点,该点不是之前的点算的最短路径上的一个点,就需要重新计算,求重新计算的最大次数与最小次数 已知终点,那我们可以反向跑一个最短路,求出每个点到终点$t$的距离$d_u$, 假设现在是$u$点 1.若$u$全部的可达点v满足 $d_u 阅读全文
posted @ 2020-03-08 17:00 GRedComeT 阅读(102) 评论(0) 推荐(0)
摘要:"题目链接" 转换一下问题就是求每个点的最大长度,容易想到树的直径,一个点的最大长度就是他到两个端点长度的最大值,那我们就可以跑3遍dfs,第一遍求出直径的一个点,第二遍求出每个点到这个点的最大距离,第三遍利用第二遍求得的直径的另一点,反向跑,答案就是两者的最大值 这题好像还可以用点分治或者两遍df 阅读全文
posted @ 2020-02-26 22:04 GRedComeT 阅读(98) 评论(0) 推荐(0)
摘要:对于本题,最短路,考虑bfs,那么我们可以跑2次bfs,求出每个点到1与n的最短路,设为x_a, x_b,那我们可以把问题转换成max(min{x_a+y_b,x_b+y_a}+1)(x,y属于1到n),我们假设x_a+y_b<=x_b+y_a,那我们就是求出x_a+y_b的最大值,不等式转换一下, 阅读全文
posted @ 2020-02-18 21:56 GRedComeT 阅读(345) 评论(0) 推荐(1)
摘要:简述题意 给你N个数对 表示坐标与状态(0/1), M个操作,给定一个区间,区间内的坐标的状态翻转 思路:看到区间修改,很容易想到差分,对数对sort,每个a_i与a_i-1异或构造差分数组b,每次对[l,r]区间操作时,只需要将b[l]与b[r+1]对1异或操作就行了 那么我们如何判断哪些操作需要 阅读全文
posted @ 2020-02-17 20:51 GRedComeT 阅读(318) 评论(0) 推荐(0)
摘要:简述题意,给你一课最小支撑树,对每个询问,在原有的路径上增加x-y,问a-b是否有路径长度为k的路,每条路每个点可以重复使用 由于是最小支撑树,我们可以用LCA来快速判断每个点之间的距离,那么现在就要判断情况,假设从原有的路上,a-b的距离为d,d=k时显然成立,当d<k时,若(d-k)%2=0也成 阅读全文
posted @ 2020-02-16 14:05 GRedComeT 阅读(173) 评论(0) 推荐(0)
摘要:本题是分层图最大流问题,相当于按时间拆点,每个当前点向下一点的下一时间层连点,每一层有n+1个点 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; const 阅读全文
posted @ 2020-02-13 21:28 GRedComeT 阅读(153) 评论(0) 推荐(0)
摘要:本题可以转换成图论来做,每两个相邻点连一条边,然后统计每一个点的degree,如果>=2说明有一个点要相邻三个点,不满足题意,然后找出每个degree<2的点,这些点可以作为一段的起点,然后依次dfs添加,如果26个字母有一个没有dfs到的,就无解 #include<bits/stdc++.h> u 阅读全文
posted @ 2020-02-13 15:39 GRedComeT 阅读(234) 评论(0) 推荐(0)
摘要:本题可以把求解的目标转换成从1到N两条不相交的路径,回想上一题,通过拆点来限制一边只能过一次,capacity为1,cost为-1来跑最大费用流,注意1点和N点的capacity要为2,因为需要过2次,答案就是最大费用流-2,本题的收获是输出路径,从每个点的出点出发(虚点)枚举其连接的下一个入点(实 阅读全文
posted @ 2020-02-12 22:15 GRedComeT 阅读(137) 评论(0) 推荐(0)
摘要:三倍经验,三个条件,分别对应了常见的3种模型,第一种是限制每个点只能一次且无交点,我们可以把这个点拆成一个出点一个入点,capacity为1,这样就限制了只选择一次,第二种是可以有交点,但不能有交边,那我们就不需要拆点,限制每条capacity都为1就可以了,第三种直接连,没有限制( #includ 阅读全文
posted @ 2020-02-12 16:47 GRedComeT 阅读(138) 评论(0) 推荐(0)
摘要:本题和方格取数一样,也可以分成黑白点,本题加上特判一个点是否有障碍即可,其余和那题没什么区别,挂一下大佬的证明(二分图最大独立集) #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef lo 阅读全文
posted @ 2020-02-12 15:48 GRedComeT 阅读(228) 评论(0) 推荐(0)
摘要:费用流问题,每个样本选一次,就连一条capacity为1,权为给定的值,因为可以重复走,再连capacity为无穷,权为0的边,再一次连接给定的出点和汇点即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(- 阅读全文
posted @ 2020-02-12 15:04 GRedComeT 阅读(131) 评论(0) 推荐(0)
摘要:有限制的问题,显然考虑全选再根据限制去掉的想法较优,我们发现一个点四周的点受限,其x或者y差一,也就是说奇偶性不同,那我们可以将其分成白点和黑点,就变成了最小割的问题,将每个白点向受限制的黑点连边,capacity为INF,每个黑点向汇点连边,capacity为该点的值,同理,源点向每个白点连边,这 阅读全文
posted @ 2020-02-12 14:01 GRedComeT 阅读(138) 评论(0) 推荐(0)
摘要:简单的费用流问题,每个人对每个任务连边,每个任务对汇点连,源点对每个人连,最大费用取反即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; const in 阅读全文
posted @ 2020-02-12 12:44 GRedComeT 阅读(145) 评论(0) 推荐(0)
摘要:简单的最大流问题,一样的设源点汇点,每个单位向每个餐桌连capacity为1的边,源点向每个单位连capacity为人数的边,每个餐桌向汇点连capacity为座位数的边,跑最大流,若flow=总人数则有方案,遍历每一个单位流量为1的点即可 #include<bits/stdc++.h> using 阅读全文
posted @ 2020-02-12 12:11 GRedComeT 阅读(112) 评论(0) 推荐(0)
摘要:最小路径覆盖=节点数-最大匹配数,拆成二分图跑dinic/匈牙利即可,注意输出路径的时候判断拆成的入点和出点和另加的反向边 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long l 阅读全文
posted @ 2020-02-12 11:54 GRedComeT 阅读(148) 评论(0) 推荐(0)
摘要:本题很简单的费用流问题,有石头的点需要限制,那我们就可以拆点,capacity为1就可以限制,然后cost为-1,直接跑板子就可以了,注意输出的时候找残量网络的反向边 阅读全文
posted @ 2020-02-11 22:23 GRedComeT 阅读(105) 评论(0) 推荐(0)