图论
文章平均质量分 64
issue是fw
19 years old, struggling in life, chasing daydreams.
展开
-
CF1364D Ehab‘s Last Corollary(思维,环,二分图,构造)
LINK考虑一个环如果长大于等于kkk,那么我们每次隔点取点,取出了⌈k2⌉\lceil \frac{k}{2}\rceil⌈2k⌉个不相关点当然,这个环必须是复杂环中的最小环,否则可能点和点之间仍然存在边若这个最小环点数已经小于等于kkk,输出这个环即可否则可以隔点取,输出这个独立集(输出⌈k2⌉\lceil \frac{k}{2}\rceil⌈2k⌉个点即可)至于无环的情况,显然只可能是一棵树,对树二分图染色,必然有一侧的点大于等于⌈n2⌉\lceil \frac{n}{2}\rceil⌈原创 2021-10-03 11:22:47 · 315 阅读 · 3 评论 -
2021 年百度之星·程序设计大赛 - 初赛二 1003.魔怔(欧拉回路,思维)
LINK现在只把白边当作边计算入度考虑游走的过程中,只有起点和终点经过了奇数次.因为从一条边进入这个点,必定会从另一条边出去而起点少一次进入,终点少一次出去,所以这两个点度数应该为奇数特别的,如果起点就是终点,那么所有点都经过了偶数次.考虑把白边先连起来,形成若干个连通块Ⅰ.当奇数点个数不为000或222时显然根据欧拉路(上面的推论),不可能完成一笔画Ⅱ.当奇数点个数为222且起点不为奇数度节点时,不可能完成一笔画Ⅲ.否则,考虑起点在某个连通块内部由于每个连通块内,根据欧拉回路的性质都可以原创 2021-08-04 20:57:20 · 388 阅读 · 8 评论 -
The Preliminary Contest for ICPC Asia Nanjing 2019 H. Holy Grail(spfa或floyd,负环)
LINK题意nnn个点,mmm条有向边,然后给你六组起始点(sss点和ttt点)你要在sss和ttt之间建一个有向边,添加后不能存在负循环要使得权值最小,问这六组边依次是多少?(先前增加的边在后续不会消失)(可以添加负边,题目给的边权也有可能为负)暴力一点,显然加的边权具有单调性,越小越容易成为负环就直接二分边权,然后从sss跑spfaspfaspfa判断是否有负环即可然后判负环也可以使用floydfloydfloyd,就是判断一下disi,idis_{i,i}disi,i是否为负数但原创 2021-06-22 14:54:34 · 224 阅读 · 0 评论 -
牛客练习赛81 D.小 Q 与树(点分治+容斥)
LINKnnn个点的树,点iii的点权是aia_iai求∑u=1n∑v=1nmin(au,av)∗dis(u,v)\sum\limits_{u=1}^n\sum\limits_{v=1}^n\rm min(a_u,a_v)*dis(u,v)u=1∑nv=1∑nmin(au,av)∗dis(u,v)树上路径问题,考虑点分治找出重心uuu,然后计算所有通过点uuu的路径贡献然后从原图中消去点uuu,然后对各个连通块进行同样的分治.通过点uuu的路径贡献怎么算…先爆搜出所有从uuu出发的原创 2021-06-04 16:30:13 · 249 阅读 · 0 评论 -
牛客练习赛81 D.小 Q 与树(树剖+套路)
LINKnnn个点的树,点iii的点权是aia_iai求∑u=1n∑v=1nmin(au,av)∗dis(u,v)\sum\limits_{u=1}^n\sum\limits_{v=1}^n\rm min(a_u,a_v)*dis(u,v)u=1∑nv=1∑nmin(au,av)∗dis(u,v)考虑min\minmin不太好处理,我们按照点权从大到小加入权值第iii大的点记作rki\rm rk_irki那么这个点和前面所有点产生的贡献是∑i=1k(deeprkk+deeprki原创 2021-06-04 15:33:14 · 297 阅读 · 0 评论 -
J. Joining Capitals(斯坦纳树变形)
LINK假如没有特殊点只能连出一条边的限制就是个裸的斯坦纳树了斯坦纳树有两个转移,其中转移f[i][s]=min{f[i][sub]+f[i][sub⊕s]}f[i][s]=\min\{f[i][sub]+f[i][sub\oplus s]\}f[i][s]=min{f[i][sub]+f[i][sub⊕s]}这就是合并两个子树,所以我们不对特殊点做这个转移即可#include <bits/stdc++.h>using namespace std;const int maxn =原创 2021-05-01 16:12:41 · 301 阅读 · 0 评论 -
AtCoder Beginner Contest 197 F - Construct a Palindrome(dijkstra变形)
LINK题意nnn个点mmm条边,每条边有一个字母求111到nnn的最短路径长度,路径满足经过的边字母连起来是一个回文串如果111号点往外走了一条字母为aaa的边,那么nnn号点肯定也要走字母为aaa的边所以每次决策都是拿1,n1,n1,n一起决策那么定义f[i][j]f[i][j]f[i][j]表示111号点走到iii且nnn号点走到jjj的最小花费这样就和普通的最短路没什么区别了,只不过状态的转移从一维变成了二维每次枚举相同字母的边转移,压入优先队列#include <bits原创 2021-04-13 17:26:55 · 313 阅读 · 0 评论 -
【模板】Prufer 序列
LINKPruferPruferPrufer序列①.Prufer->Tree设置指针i=1,j=1i=1,j=1i=1,j=1,且让p[n−1]=np[n-1]=np[n−1]=nⅠ.jjj一直自增找到第一个字典序最小的叶子节点Ⅱ.令fa[j]=p[i]fa[j]=p[i]fa[j]=p[i],并修改p[i]p[i]p[i]的度Ⅲ.若p[i]p[i]p[i]成为新的叶子节点且字典序更小,令fa[p[i]]=p[i+1]fa[p[i]]=p[i+1]fa[p[i]]=p[i+1]同时修改p原创 2021-04-11 20:34:49 · 219 阅读 · 0 评论 -
P4294 [WC2008]游览计划(斯坦纳树+输出路径)
LINK乍一看,普通的最小斯坦纳树啊~网格图,改成有向边就好了呀!!注意我们的两个转移①.合并iii的子树f[i][s]=f[i][j]+f[j⊕s]f[i][s]=f[i][j]+f[j\oplus s]f[i][s]=f[i][j]+f[j⊕s]②.扩展iii子树的联通性f[i][s]=f[v][s]+w(v,i)f[i][s]=f[v][s]+w(v,i)f[i][s]=f[v][s]+w(v,i)注意合并的方程,其实是有问题的考虑到f[i][j]f[i][j]f[i][j]和f[i原创 2021-04-11 17:59:15 · 308 阅读 · 0 评论 -
P3264 [JLOI2015]管道连接(斯坦纳树森林)
LINK和普通斯坦纳树不太一样,这里是求一个斯坦纳树森林只要求同色点在一个连通块内考虑先做一遍普通斯坦纳树想形成斯坦纳树森林,比如是由几个完整的斯坦纳树合并而来完整指的是,状态中若包含颜色xxx,就必须包含所有颜色xxx的点基于上面这个信息,我们可以得到一个ggg数组,g[s]g[s]g[s]表示状态为sss的斯坦纳树的最小花费目前的g[s]g[s]g[s]都是围绕某个中心点形成的连通块,所以我们可以合并树为森林这么这个合并过程可以枚举子集来完成当然,枚举的子集也需要是完整的斯坦纳树不过原创 2021-04-11 16:02:27 · 292 阅读 · 0 评论 -
牛客练习赛80 D.分组(tarjan+倍增二分)
LINK问题具有单调性质,可以每次二分一个最右端点去跑tarjantarjantarjan我们最多可能二分log(m)log(m)log(m)次,一般当然还是能跑但当每个组的长度都是111,那么第一次二分到n2\frac{n}{2}2n位置,第二次二分到n4\frac{n}{4}4n位置…这样对于每个组的checkcheckcheck达到了O(nlog(m))O(nlog(m))O(nlog(m))无法接受复杂度不优秀发现是因为有些组的合法长度很小,然而我们却不能快速锁定这个组,加了很多无用原创 2021-04-10 11:01:04 · 287 阅读 · 0 评论 -
【模板】最小斯坦纳树
LINK题意给定一个nnn个点mmm条边的无向图,其中有kkk个关键点求一个权值最小的连通子图,使得子图包含所有的关键点。n<=100,m<=500,k<=10n<=100,m<=500,k<=10n<=100,m<=500,k<=10因为kkk不大,考虑状态压缩当前包含的关键点状态最后的连通子图一定是一棵树,成环的话,环上的边没有意义,答案反而增大所以我们枚举这颗树的中心点iii,相当于变成一颗以iii为根的树定义f[i][s]f[i原创 2021-04-08 13:04:06 · 371 阅读 · 0 评论 -
P3872 [TJOI2010]电影迷(扩展最大全闭合图)
LINK扩展最大权闭合图容易想到源点向正点权连边,负点权向汇点连边,流量为各自权值的绝对值这样初始价值就是正点权的价值对于限制(x,y,val)(x,y,val)(x,y,val),由xxx向yyy连边,流量为valvalval.至于正确性,这里有证明其实我对这种做法仍然存有疑虑,所幸有第二种做法。集合划分模型我们把每个点的点权都加上一个很大的数basebasebasesss向点uuu连流量为valu+baseval_u+basevalu+base的边,uuu向ttt连流量为baseba原创 2021-04-05 22:15:16 · 232 阅读 · 0 评论 -
P3288 [SCOI2014]方伯伯运椰子(流量守恒,分数规划)
LINK方伯伯在一个DAG上跑网络流因为我们不能减少交通量,那肯定也不会去可以增加交通量(不划算,因为要多交运费)所以能做的调整就是把一些流量扩充到另一些边去扩容的方式大概是这样:比如现在从源点到汇点有两条路径A,BA,BA,B那么我们可以让AAA路径流量整体加一,让BBB路径的流量整体减一,这样仍然流量守恒不过答案可能就会发生变化了。然而,直接去考虑DAGDAGDAG的所有路径不太好搞我们把扩容当作正向边,把压缩看成反向边这样图中的每个环都相当于一个替换流量的方案!!再考虑答案的计算方原创 2021-04-05 12:50:37 · 248 阅读 · 0 评论 -
P3825 [NOI2017] 游戏(构造2-SAT模型)
LINK我原本以为2-SAT只有裸题…太憨了…说实话刚看到这题我还以是网络流,我是fw把二者取一模型先只考虑xxx地图以外的地图,发现比较特殊虽然你有三种车,但是除掉不适合的类型就只有两种合适的车2-SAT一般是解决二者取一问题,那么现在就是从两种合适的车选一个简化状态之前的2-SAT每个点的状态都是真/假,现在可是有A/B/CA/B/CA/B/C三种车啊!!但是每次游戏只有两种选择可以把状态抽象为选择第一种合适的车,或者选择第二种合适的车建图满足限制现在每次游戏都拆分为了两个点,原创 2021-04-05 11:33:15 · 248 阅读 · 0 评论 -
P6378 [PA2010] Riddle(2-SAT的前缀和优化建图)
LINK为什么我要来学这种鬼畜的东西啊每个点只有选和不选两种状态,那么拆点aia_iai表示选第iii个点作为关键点,ai′a_i'ai′表示不选对于边的限制那么对于一条边(i,j)(i,j)(i,j),连边(ai′,aj)(a_i',a_j)(ai′,aj)和(aj′,ai)(a_j',a_i)(aj′,ai)表示其中一个不选,另一个必选。对于每个部分的限制这个暴力一点,对于当前部分的每个点让这个点选的状态向所有其他点不选的状态连边,表示只能同时选一个然而这样是O(n2)O原创 2021-04-04 16:17:47 · 343 阅读 · 0 评论 -
P5782 [POI2001] 和平委员会(2-SAT)
LINK每个代表要么被选中,要么不被选中,标记为truetruetrue或falsefalsefalse为了方便,规定xxx为truetruetrue时编号xxx,为falsefalsefalse时编号x+basex+basex+base对于相互厌恶的u,vu,vu,v来说u,vu,vu,v不能同时为truetruetrue若u=trueu=trueu=true则v=falsev=falsev=false,连边(u,v+base)(u,v+base)(u,v+base)若v=truev=truev原创 2021-04-04 14:34:58 · 229 阅读 · 0 评论 -
牛客练习赛63 F.牛牛的树行棋(启发式合并+sg打表)
LINK假设只有一枚棋子,那么这枚棋子在叶子节点的sgsgsg值显然是零其他节点可以sgsgsg打表推出来,由于只需要子树内的sgsgsg值,似乎需要用到启发式合并计算但是我们发现叶子节点是sgsgsg是零,说明叶子节点的父亲至少是111…一个点的sgsgsg值取决与子树内深度最大的叶子节点于是可以O(n)O(n)O(n)直接先算出来现在求先手第一步也多少种方案移动使得先手必胜也就是移动完之后sgsgsg值需要变成零如果节点xxx的sgsgsg值是sg[x]sg[x]sg[x],当前总的sgs原创 2021-03-09 13:07:02 · 195 阅读 · 0 评论 -
P5840 [COCI2015]Divljak(ac自动机+排序树上差分)
LINK题意AliceAliceAlice有nnn个字符串,分别是s1,s2...sns_1,s_2...s_ns1,s2...sn现在给出qqq次询问,分以下两类Ⅰ 1 P向集合中加入字符串PPPⅡ. 2 x询问集合中有多少字符串包含sxs_xsx询问集合中有多少字符串包含给定字符串一般来说可以对集合建立acacac自动机,然后拿询问串在acacac自动机上跑预处理failfailfail树上的和可以做到O(n)O(n)O(n)但是这里的集合是动态添加呢…似乎不可以动态维护fa原创 2021-03-09 11:38:42 · 248 阅读 · 1 评论 -
P4926 [1007]倍杀测量者(差分约束取log判正环或负环)
LINK赛后一定有选手去女装,说明原来的各种限制一定不同时成立设原来的限制成立,我们可以建立如下不等式选手AAA立下kkk倍杀选手BBB(条件一)wA>=(k−T)wBw_A>=(k-T)w_BwA>=(k−T)wB,两边取lnlnln得到log(wA)>=log(k−T)+log(wB)log(w_A)>=log(k-T)+log(w_B)log(wA)>=log(k−T)+log(wB)选手AAA立下选手BBB不能kkk倍杀自己 (条件二)(k+T原创 2021-03-08 21:21:02 · 280 阅读 · 0 评论 -
P2474 [SCOI2008]天平(dp或差分约束)
LINK可以直接跑差分约束得到合法解的最小解和最大解…但是没有用,求不出方案数考虑直接把变量看成两个砝码的差值令f[i][j]f[i][j]f[i][j]表示max(wi−wj)max(w_i-w_j)max(wi−wj),令g[i][j]=min(wi−wj)g[i][j]=min(w_i-w_j)g[i][j]=min(wi−wj)看作一个dpdpdp来求解对于+++,有wi−wj=1或wi−wj=2w_i-w_j=1或w_i-w_j=2wi−wj=1或wi−wj=2令f[i原创 2021-03-07 21:28:33 · 263 阅读 · 0 评论 -
差分约束详解([从建图选择到建图技巧])
目录~Ⅰ.最短路,最长路建图方式①跑最短路②.跑最长路③.选择最长路还是最短路的区别Ⅱ.关于建图技巧①.乘法转对数取LnLnLn②.三个变量的不等式,二分其中一个变量Ⅰ.最短路,最长路建图方式比如对于不等式dis[u]<=dis[v]+xdis[u]<=dis[v]+xdis[u]<=dis[v]+x①跑最短路我们由vvv向uuu连一条权值为xxx的边,然后跑最短路,就能满足限制。为什么??假设我们求出了dis[v]dis[v]dis[v],因为vvv到uuu有权值为xxx的原创 2021-03-07 17:36:06 · 539 阅读 · 0 评论 -
2020 CCPC Wannafly F.采蘑菇的克拉莉丝(轻重链的应用)
LINK首先有一个很nativenativenative的想法因为一个节点到父亲节点的边是容易统计贡献的,只需要算出不在子树内的蘑菇数量即可现在只需要统计子树内蘑菇的贡献即可当vvv节点加上xxx个蘑菇时,把根节点111到vvv的路径上都加上111那么只需要枚举节点到所有儿子的边,就可以算了这样会被菊花图卡掉考虑优化我们把vvv到根节点111路径上的点都加上xxx时,不断从重链跳到另一条重链去所以,我们就把重链和重链间的那条轻边统计答案到它的父亲去这样一来,途中的所有轻儿子的贡献都被累加原创 2021-03-06 19:13:38 · 259 阅读 · 2 评论 -
牛客练习赛43 C.Tachibana Kanade Loves Review(思维生成树)
传送门把这些二元关系看成边(x,y,h)(x,y,h)(x,y,h)看成xxx到yyy有hhh的边同时yyy到xxx有权值hhh的边不难发现这是一个最小生成树的模型(原谅我这么傻逼没发现)用ccc的代价就可以连接aaa和bbb新建源点sss,向每个知识点连权值TiT_iTi的边这样跑一个最小生成树就是最小代价#include <bits/stdc++.h>using namespace std;const int mod = 1e9+7;#pragma GCC optim原创 2020-12-29 11:48:23 · 249 阅读 · 1 评论 -
HDU3830 Checkers(思维隐式建图+数学lca)
传送门题意给定三元组(x,y,z)(x,y,z)(x,y,z)每次可以从x,y,zx,y,zx,y,z任选一个作为对称轴,其余数字可以根据这个对称轴跳到另一侧规则是不能跨越两个数字给你两个三元组,判断最短操作步数.分析\color{Red}分析分析这题思路是真的隐蔽…首先对于三元组(x,y,z)(x,y,z)(x,y,z)首先yyy可以跳到xxx左侧,也可以跳跃到zzz右侧,这是毫无疑问的然后,当y−x<z−yy-x<z-yy−x<z−y时,xxx可以跳到yyy右边,因原创 2020-11-30 22:27:25 · 270 阅读 · 0 评论 -
HDU 4005 The war(边双连通+思维树型dp)
传送门题意 给定一张 n 个点 m 条边的无向连通图加入一条边,使得图中权值最小的桥权值最大,如果能使图中没有桥则输出 −1。首先环内的边删去没有用处,所以边双连通缩成一棵树那么在树上两点连接,路径上的边都不是桥了问题转化为,在树上选择一条链,使得其余边的最小边权最大.那么树上的最小边一定在链上那么这棵树被这条特殊边分成两棵树,可以分别以边的两端向下延伸而且每到一个点,维护向下走的最小值和次小值那么这条路径最多覆盖最小值,次小值不可避免,取minminmin即可#include &原创 2020-11-24 13:11:40 · 262 阅读 · 0 评论 -
HDU 3639 Hawk-and-Chicken(缩点+dfs)
传送门题意就是求每个点最多被多少个点传递到那么直接上缩点,反向建图变成一个DAGDAGDAG然后每个点有自己的点权,可以从入度为000的开始dfsdfsdfs累加点权.另外拓扑排序是不可行的。#include <bits/stdc++.h>using namespace std;const int maxn = 3e5+10;int t,n,m,casenum=0;int in[maxn],f[maxn],w[maxn];vector<int>vec[maxn];原创 2020-11-24 09:40:41 · 276 阅读 · 0 评论 -
Poj 3613 Cow Relays(floyd的矩阵快速幂)
传送门非常nbnbnb的一道题假如求方案数,那么可以定义f[i][j]f[i][j]f[i][j]为iii次到jjj的方案数可以得到f[i+1][v]+=f[i][j]f[i+1][v]+=f[i][j]f[i+1][v]+=f[i][j]所以可以以01邻接矩阵作矩阵快速幂得到方案数.然后这里的权值也是同样的道理假如现在得到了经过xxx个点的最短路,求经过x+yx+yx+y个点的最短路那么只需要有经过yyy个点的最短路即可这样加起来就经过了x+yx+yx+y个点所以把邻接矩阵同时作为初始矩原创 2020-11-23 21:02:29 · 236 阅读 · 0 评论 -
HDU 1350 Taxi Cab Scheme(最小路径覆盖)
传送门啊啊啊一个人如果在 (a,b)(a,b)(a,b) 点到 (c,d)(c,d)(c,d)乘出租车需要花费的时间为∣c−a∣+∣d−b∣|c−a|+|d−b|∣c−a∣+∣d−b∣如果一辆车可以在乘客出发前的达到(不取等),就可以接到该乘客。现在收到了 n 份订单,求最少用多少出租车,可以完成所有的任务。#include <bits/stdc++.h>using namespace std;const int maxn = 2e5+10;int n,m,a[maxn],b[原创 2020-11-23 19:45:22 · 233 阅读 · 0 评论 -
HDU 1045 Fire Net(二分图匹配变形)
传送门其实换汤不换药还是一行只能匹配一列但是如果被一个块隔开,那么一行就能当两行用所以根据块把行,列重新编号跑二分图匹配即可#include <bits/stdc++.h>using namespace std;const int maxn = 2e5+10;int n,m,row[19][19],col[19][19];char a[19][19];struct edge{ int to,nxt;}d[maxn]; int head[maxn],cnt=1;void原创 2020-11-23 19:05:26 · 220 阅读 · 0 评论 -
HDU 3666 THE MATRIX PROBLEM(取对数的差分约束)
传送门log L<=log Cij+log ai−log bj<=log Rlog\ L <= log\ C_{ij} + log\ a_i- log\ b_j <= log\ Rlog L<=log Cij+log ai−log bj<=log Rsi>=log L−log Cij+sn+js_i>=log\ L-log\ C_{原创 2020-11-23 18:21:09 · 302 阅读 · 0 评论 -
HDU 1498 50 years, 50 colors(裸的最小点覆盖)
题意n*n的矩阵,分布着各种颜色的气球,k次操作:每次操作扎破一行或一列的同一颜色的气球。问在k次操作后有那几种颜色的气球是不能被完全扎破的.枚举每一种颜色的气球判断是否能轧光若这个气球在第iii行第jjj列,说明选择第iii行或第jjj列都是可以的所以行在二分图左边,列在二分图右边,跑一个最小点覆盖即可#include <bits/stdc++.h>using namespace std;const int N = 1009;int n,k,col[N],a[N][N],原创 2020-11-23 12:34:26 · 227 阅读 · 0 评论 -
HDU 3592 World Exhibition(--差分约束--)
传送门nnn个人排队xxx个相互喜欢的关系,表示dis[u]−dis[v]<=wdis[u]-dis[v]<=wdis[u]−dis[v]<=wyyy个相互厌恶的关系,表示dis[u]−dis[v]>=wdis[u]-dis[v]>=wdis[u]−dis[v]>=wdis[u]<=dis[v]+wdis[u]<=dis[v]+wdis[u]<=dis[v]+w那么vvv向uuu连一条权值www的边dis[v]<=dis[u]−wdi原创 2020-11-23 10:29:24 · 214 阅读 · 0 评论 -
HDU 3440House Man(差分约束)
传送门题意:要从高度最低的地方跳到高度最高的地方 每次跳跃的距离小于等于d每次只能跳到下一个比他高但是和他高度最接近的位置每个位置都有一个高度值 并且顺序不能换 最低和最高的最远距离。定义s[i]s[i]s[i]为点iii在的位置,这保证了相对位置可以得到s[i]>s[i−1]s[i]>s[i-1]s[i]>s[i−1]然后对于高度差相邻的两个序号u,vu,vu,v为了保证能跳过去得到s[u]−s[v]<=ds[u]-s[v]<=ds[u]−s[v]<=原创 2020-11-22 21:41:34 · 242 阅读 · 0 评论 -
度数K限制的最小生成树
传送门k_thk\_thk_th度的最小生成树#include <iostream>#include <cstring>#include <algorithm>#include <queue>#include <map>#include <utility>#include <cstdio>using namespace std;const int N = 32;const int inf = 1e9;原创 2020-11-22 20:48:46 · 401 阅读 · 0 评论 -
POJ 3522 Slim Span(极差最小生成树)
传送门非常简单啊…枚举最小生成树的最小边判断是否能构成最小生成树就好了#include <iostream>#include <algorithm>#include <cmath>#include <cstring>using namespace std;const int maxn = 2e5+10;struct edge{ int u,v,w; bool operator < (const edge&tmp ) con原创 2020-11-22 17:14:06 · 249 阅读 · 0 评论 -
HDU 1534 Schedule Problem(差分约束)
传送门开始抄一个人的题意,结果他的题意什么玩意!!和题目意思基本相反…给出每个派的持续时间,现在有一些限制条件条件1:FAF a b,a要在b完成后完成。条件2:FAS a b,a在在b开始后完成。条件3:SAS a b,a要在b开始后开始。条件4:SAF a b,a要在b结束后开始。问使得所有派的最小开始时间思路其实根本没有什么思路,按照题目建最长路的图就好了FAFFAFFAFdis[a]+ta>=dis[b]+tbdis[a]+t_a>=dis[b]+t_bdis[a]原创 2020-11-22 16:32:13 · 255 阅读 · 0 评论 -
HDU 1531 King(差分约束裸题)
传送门给出nnn个限制条件如果是gtgtgt,那么pre[r]>=pre[l−1]+k+1pre[r]>=pre[l-1]+k+1pre[r]>=pre[l−1]+k+1也就是l−1l-1l−1向rrr连边权k+1k+1k+1的边如果是ItItIt,那么pre[r]−pre[l−1]<kpre[r]-pre[l-1]<kpre[r]−pre[l−1]<k变化得pre[l−1]>=pre[r]−k+1pre[l-1]>=pre[r]-k+1pre[l−原创 2020-11-22 13:44:08 · 233 阅读 · 0 评论 -
HDU 1529 Cashier Employment(二分转差分约束)
分析过程\color{Red}分析过程分析过程为了方便,能在000时刻雇佣的人看作第一个人令pre[i]pre[i]pre[i]为[1,i][1,i][1,i]中雇佣的人num[i]num[i]num[i]为iii时刻能雇佣的人,limit[i]limit[i]limit[i]为iii时刻应该雇佣的人pre[i]−pre[i−1]>=0pre[i]-pre[i-1]>=0pre[i]−pre[i−1]>=0pre[i]−pre[i−1]<=num[i]pre[i]-pre[原创 2020-11-22 13:11:21 · 213 阅读 · 0 评论 -
HDU 1384 Intervals(抽象前缀和差分约束)
传送门hhhhnnn个区间[li,ri][l_i,r_i][li,ri],每个区间有一个cic_ici现在选出最少的数字,使得每个区间都和这个集合有cic_ici个共同的数字看了下题解,感觉很厉害啊首先把每个数字抽象为一个点,如果选择了数字kkk那么令d[k]=1d[k]=1d[k]=1然后作一个ddd的前缀和preprepre数组那么只需要满足所有的pre[ri]−pre[li−1]>=cipre[r_i]-pre[l_i-1]>=c_ipre[ri]−pre[li−原创 2020-11-21 23:19:32 · 257 阅读 · 0 评论