随笔分类 - 图论
摘要:首先答案肯定有单调性,先二分出答案 然后如何保证c[i]+c[j]不为质数 如果同奇偶的话,除了1和1,其他必不为质数,否则可以for循环暴力判一下 所以如果是质数,必定为一奇一偶,这两点不能同时选 启发了我们可以把点分开来,奇数在一边,偶数在一边,在不能同时选的两点间连inf的边(因为inf不能被
阅读全文
摘要:很经典,想记录一下 网络流里有一个很典的trick,求最大获利转化成最小损失 求最小损失转化成割边 求的是max(边权和-边所连接的点权和),考虑把边看成左部点,把点看成右部点 刚开始我们假设边全都要选,那么最小割也就是选取左部所有点,去掉右边所有点 也就是把所有边都选了,再扣掉所有点(根据最小割的
阅读全文
摘要:直接用城市建点的话不好表达连边的关系 考虑把每条边看作左部点 右部点的话朴素想法是工人,但是也不好表达工人和材料的关系 发现工人的信息可以整合成一共有多少种材料,每种材料有多少人擅长 所以把材料看成右部点,城市和所需材料之间连容量为1的边,材料和汇点T之间连容量为“擅长该材料人数”的边 那基环树怎么
阅读全文
摘要:观察到n+m最多才2000个点,正解也不是差分约束 但是它能跑:) 建图比较平凡不记述 难得的是用链式前向星T了,改vector过了 T9的话是加了随机化优化,cin读入,链式前向星存边 1513ms的是没加随机化优化,scanf读入,vector存边 857ms的是没加随机化优化,scanf读入,
阅读全文
摘要:考虑怎么处理关系为0的状况 最开始写了一个分类讨论,然后发现这俩等式是矛盾的并不在一起,遂丢进垃圾箱里 但是,其实不关心谁大谁小,只要满足abs|Ai-Aj|==1就可以 根据解绝对值不等式的知识,解得: -1<=Ai-Aj<=1 yeah,现在有不等式了,怎么处理最大化极差的问题?看到不等式想到跑
阅读全文
摘要:正解据说是贪心+dp 可惜我这个人没什么脑子:) (遇到了能用差分约束也能用dp+贪心的第二题了,真是神奇 假设有一组合法的sum就能逆推出di,因为ai+di+1=sumi最小化Σdi就是最小化Σsumi考虑sumi应该满足的条件1.是递增的sumi>=sum(i-1)2.sumi<=sum(i-
阅读全文
摘要:最短路三角形不等式:Xi<=Xj+w(根据最短路的定义,要是不满足的话就不是最短路了) 给出若干个形如Xi-Xj<=w的约束条件,考虑求一组合法的解。 把问题转化成求最短路,对于Xi-Xj<=w,我们从j向i连一条边权为w的边 如果有负环的话即无解。 ...? 但差分约束难搞一点的话还要求最大解、最
阅读全文
摘要:考虑黑白染色,i+j%2==1的为黑格 一块多米诺就要覆盖一黑一白,相当于一个匹配 那全覆盖也就是存在完美匹配 (应该是网络流经典的trick? 讨论选取的点来自同一边和两边 1.同一边 任意挑选两个点去掉后左右两边个数不相等,肯定不存在完美匹配 贡献是cnt*(cnt-1)/2*2=cnt*(cn
阅读全文
摘要:根据线性代数的知识可知邻接矩阵自乘相当于做floyed 把输入转化为01矩阵(显然>1的数和1是等价的)得到邻接矩阵 问是否存在k次后所有数都为正数等价为自乘k次后所有点两两可达 转化为图论,用tarjan缩点判断scc的数目是否只有一个,或者直接bitset优化folyed也可以 #include
阅读全文
摘要:裸的tarjan 依题意有向图上i和j之间能互相到达,i和j肯定在同一个scc内 最小的代价就是Σ每个scc内最小的cost 方案就是每个scc内最小值的数的乘积 #include<bits/stdc++.h> using namespace std; const long long mod=100
阅读全文
摘要:一眼并查集 但是怎么维护,借鉴了别人的思路 如果有重叠的话端点一定要重叠,所以用端点来代表线段就可以了 但是暴力连边复杂度受不了 考虑把线段拆成两点,同色的放入一个集合,更新的时候不断合并直至size()==1(==1不erase是因为要留下r最大的,显然只有r最大的有用) #include<bit
阅读全文
摘要:很好的题 [ 观察样例发现只有0,1,2 大胆猜测是不是也只会有0,1,2 如果不是的话说明某条路径上出现过0,1,2,且是以2,1,0的情况出现的 但是2的末尾是0,和1&不可能得到1,所以假设不成立 ] 然后考虑什么时候有0 有0的充分必要条件是对于二进制的每一位,都有一个地方出现一个0 相反的
阅读全文
摘要:不用真的建图,真的建图两人之间的代价不好算。 等价转化为对给定的ai找出bi,使得bi=k*a[i],且互不相同 k的上界为n,简易证明: [ 若a[i]互不相等,全部选a[i]*n会比a[i]*(n+1)更好; 若存在一对a[i]相等,可以使其中一个数取n-1 若再存在一对,取n-1.. 必能在n
阅读全文
摘要:题意: 有n个学生,m个社团,每个学生只属于一个社团。在接下来的d天内每天会离开一个学生(再也回不来了)。 现要从剩下的每个社团中挑选一个学生组成team,并最大化他们的mex。 题解: 顺着二分图的学习摸到这里,最开始想的是正向直接加边魔改一下匈牙利,但是会超时(因为每次加新边后得到的都是新图,匈
阅读全文
摘要:本来的思路是纯纯地打一个大暴力 在残余网络上跑spfa,每跑出一条增广路就是当前能扩容的最小花费 然后k<=10,只需要跑最多十次:) 正解是建平行边啦,容量为inf,费用为扩容费用,起到的效果是等价的~ #include<bits/stdc++.h> using namespace std; co
阅读全文
摘要:看到题解有压缩图的tag,以为是很高大上的玩意 点进去发现竟然是不要建多余的边捏.. 正确性: 如果a->下一个和它值差为1的元素,那么后面还有好几个和它值差为1的元素呢? 能完美代替,并且选择还更多。 思考一下流流动的过程,发现如果想满足跳着选的话这样建边也是可以实现的 给我的启发:建边上的优化
阅读全文
摘要:神仙题,想了两节ds课没想出来,跑到奇怪的犄角旮旯去了还是没法搞一个满意的模型 看了洛谷黑题啊..释然了 思路和细节在代码 // LUOGU_RID: 90857083 #include<bits/stdc++.h> #pragma GCC optimize(3) #pragma GCC targe
阅读全文
摘要:要证明的话这玩意是有背景的..but,又不是搞证明的 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <bitset> #include <set> using namesp
阅读全文
摘要:给定若干个点对,每个点对包含的数字均在1-n之间 要求把这些点对分到两个set里面,使得每个set里面的n不重复 (话说我的第一反应是2-set然后慌张自己2-set不会打嘿嘿嘿) 一般这种匹配,冲突,点,都和图论有点关系 和图论有点关系就是要建图啦 俺的建图是把数字看成一个节点,如果存在点对,比如
阅读全文
摘要:思路来自实验室一个work hard的学长~ 题意是说有一个点集,在树上,能否一笔画把这些点集走一遍 easy版本因为q在[1,5]之前,范围比较小,可以暴力 考虑什么情况下不能一笔画~ 如果对于一个点,它的分支有父亲fa、若干个儿子son 设想如果很多个分支上都有点集,显然没法一笔画走过去 当且仅
阅读全文