![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
C202044zxy
这个作者很懒,什么都没留下…
展开
-
[学习笔记] 点分治 and 点分树
点分治的思想我觉得点分治和 cdq\tt cdqcdq 分治极其相似,但是点分治是用于树上的问题。回忆一下 cdq\tt cdqcdq 是怎么做的,他其实是把序列从中间划开,先分别处理两边,然后算两边之间的贡献。由于划分成了相等的两端,那么复杂度就得到了保证,此算法本身是 O(nlogn)O(n\log n)O(nlogn) 的。从中间划开 是复杂度得到保证的关键,那么树上能不能也从中间划开呢?好像有点难,但是我们可以从重心划开,那么分成的子树都是小于等于原树的一半的,我们先单独递归子树,然后考虑子原创 2020-11-30 16:13:04 · 422 阅读 · 2 评论 -
[CSP2020] 函数调用
一、题目点此看题二、解法原创 2020-11-20 20:33:01 · 686 阅读 · 0 评论 -
CF1242C Sum Balance
https://www.luogu.com.cn/problem/CF1242C原创 2020-10-04 19:50:34 · 186 阅读 · 0 评论 -
[POJ 2513]&[欧拉路模板] Colored Sticks
一、题目点此看题二、解法这道题是欧拉路的模板题,我们借此对欧拉路做一个具体的梳理。欧拉回路欧拉回路指要访问完每条边,要求回到终点的路径。如果一个无向连通图存在欧拉回路,那么每个点的度数都为偶数(进了就可以立即出去,最后回到起点)如果一个有向联通图存在欧拉回路,那么每个点的入度等于出度。欧拉路径欧拉路径指要访问完每条边,不要求回到终点的路径。如果一个无向连通图存在欧拉路径,那么只有000或222个点度数为奇数。如果一个有向联通图存在欧拉路径,那么只有000或111个点的入度等于出度加一,原创 2020-09-23 21:58:55 · 129 阅读 · 1 评论 -
CF915D Almost Acyclic Graph
一、题目点此看题二、解法原创 2020-08-24 11:31:18 · 135 阅读 · 0 评论 -
CF1220E Tourism
一、题目点此看题二、解法原创 2020-08-24 11:19:15 · 185 阅读 · 0 评论 -
CF1100E Andrew and Taxi
一、题目点此看题二、解法原创 2020-08-24 09:59:41 · 121 阅读 · 0 评论 -
[HDU 1814] Peaceful Commission
一、题目点此看题二、解法这就是2-sat\text{2-sat}2-sat带字典序最小解的经典问题,时间复杂度O(n2)O(n^2)O(n2),还是结合代码讲更好:#include <cstdio>#include <iostream>using namespace std;const int M = 20005;int read(){ int num=0,flag=1;char c; while((c=getchar())<'0'||c>原创 2020-06-17 21:58:51 · 140 阅读 · 0 评论 -
[HDU 4421]Bit Magic
一、题目点此看题二、解法我们分成0−300-300−30位分别考虑,判断合法就用2-sat\text{2-sat}2-sat,设iii表示000,i+ni+ni+n表示111,我们考虑建图。或运算:如果是111,连(i,j+n),(j,i+n)(i,j+n),(j,i+n)(i,j+n),(j,i+n);如果是000,连(i+n,i),(j+n,j)(i+n,i),(j+n,j)(i+n,i),(j+n,j)(这样保证只会选000,因为111一定不合法)与运算:如果是111,连(i,i+n),(原创 2020-06-17 20:56:12 · 149 阅读 · 0 评论 -
Eliminate the Conflict
一、题目点此看题二、解法因为不能失败,所以只能有两种选择,我们尝试把它转化成2−sat2-\text{sat}2−sat问题。先处理出能选的两种出法(ai,bia_i,b_iai,bi),考虑k=0k=0k=0(相同)时候怎么建图:如果ai≠aja_i\not=a_jai=aj,连(ai,bj),(aj,bi)(a_i,b_j),(a_j,b_i)(ai,bj),(aj,bi)如果ai≠bja_i\not=b_jai=bj,连(ai,aj),(bj,bj)(a_原创 2020-06-17 19:08:12 · 269 阅读 · 0 评论 -
[POJ 3683]Priest Johns Busiest Day
一、题目点此看题二、解法如果在开始时进行婚礼,那么就定义它为真,否则它为假。如果两个人在开始时冲突,那么至少一个人需要选择在结束时,也就是x′∨y′x'\vee y'x′∨y′,其他情况类推然后2-sat\text{2-sat}2-sat,时间主要是建图,时间复杂度O(n2)O(n^2)O(n2),坑点就是时间相等时是合法的。#include <cstdio>#include <iostream>#include <stack>using namespa原创 2020-06-16 22:05:54 · 189 阅读 · 0 评论 -
[模板] 2-SAT问题
一、题目点此看题二、解法考虑用图论的方式解决,把每个点xxx拆成两个点xxx和x′x'x′,分别表示该点选111和000的情况,有向边的含义就是选了起点就必选终点,来建边:x∨yx\vee yx∨y,考虑xxx选000,yyy就必须选111;yyy选000,xxx就必须选111,也就是连(x′,y),(y′,x)(x',y),(y',x)(x′,y),(y′,x)x∨y′x\vee y'x∨y′,连(x′,y),(y,x)(x',y),(y,x)(x′,y),(y,x)x′∨yx'\vee y原创 2020-06-16 20:51:15 · 174 阅读 · 0 评论 -
CF786E ALT
一、题目点此看题二、解法可以考虑网络流,建图方法如下:源点连每一个人,容量为111。人连对应路径上的所有边,容量为infinfinf。所有边连汇点,容量为111。然后我们在建好的图上跑最小割,因为人连路径的边是砍不动的,我们只能砍源点到人或者边到汇点的边,这个时候就交给电脑去决策就行了,显然上述建图方法满足题意。还有一个问题就是第二个方法建出的边会很多,我们可以用线段树优化建图...原创 2020-01-21 20:51:11 · 173 阅读 · 0 评论 -
[JOI 2017 Final]足球
一、题目点此看题二、解法把每一个位置拆成666个点:0−30-30−3分别代表球正在向上下左右四个方向滚动,444代表球在该点但是没人持球,555代表球在该点而且有人持球。下面详细讲一下建边的方法:没人持球到有人持球,召唤离当前点最近的 工具 人,这人不用考虑移动,因为一个人持球并踢开后就不可能再持球了,找这个最近的人就可以用bfsbfsbfs某个方向到无人持球,边权为000某个方向继续滚动,边权为AAA有人持球到下一个位置继续持球,边权为CCC有人持球到踢出去(状态还是在当前点),边权为原创 2020-05-30 20:55:03 · 230 阅读 · 0 评论 -
[WC2011]最大XOR和路径
一、题目点此看题二、解法这道题有一个关键条件:路径可以重复经过某些点或边,当一条边在路径中出现了多次时,其权值在计算 XOR 和时也要被计算相应多的次数,所以一条边经过了偶数次就不算贡献了。我们先随便选一个起点到终点的简单路径,然后中间可以通过环来扩展,把路径看做初值,把环的权值建出线性基,那么最大值是异或起来的最大值,请看下图。可以看出红色的边一定是经过偶数次的,不影响答案,这也说明...原创 2020-05-06 20:40:45 · 283 阅读 · 0 评论 -
[SHOI2006]有色图
一、题目点此看题二、解法你多半是被题目名吸引了(手动狗头)很容易看出来是polya\text{polya}polya的题,设置换群为∣G∣|G|∣G∣,它就是n!n!n!的全排,利用burnside\text{burnside}burnside引理,问题转化成了求不动点个数,可以求出循环个数(其实是点的置换影响了边,这里是边的置换循环),那么就可以用mmm的几次方来算了。设点的循环是b1...原创 2020-04-18 23:21:24 · 538 阅读 · 0 评论 -
[NOI Online 提高组]序列
一、题目点此看题二、解法赛场上挂了是因为不知道每个操作能无限次使用,后来发现这道题挺简单的。首先我们可以把aaa变成000,bbb变成b−ab-ab−a 。然后对于t=2t=2t=2的操作,我们可以直接连边,在同一连通块里的点权值可以互相转化,我们把每一个连通块看作一个点。对于t=1t=1t=1的操作,如果我们把它看作点(连通块)连的边,那么如果两个点之间的路径长为偶数,那么他们的权值可...原创 2020-03-23 08:55:29 · 193 阅读 · 0 评论 -
CF858F Wizard's Tour
一、题目点此看题二、解法先考虑树的解法,对于每一个点,过程大致是这样的:先解决儿子的问题 ->\text{->}-> 再解决当前点的问题 ->\text{->}-> 把不能解决的问题留给父亲。上述的解决问题就是指两条相邻边的匹配,可以发现,只有根节点一条边可能会匹配不到,其他的要么自己要么父亲都处理掉了,这种算法的正确性就很显然了,因为它构造出的答案已经...原创 2020-02-10 13:02:35 · 254 阅读 · 0 评论 -
CF960F Pathwalks
一、题目点此看题关于luoguluoguluogu的题意我想做两点解释,避免异议:本题所指的最长的路径意思是经过边数最多的路径本题要求路径的中每一条的给出时间戳和边权严格递增二、解法即然要求给出时间戳递增,我们就考虑一条一条加边的时候顺便处理。每个点我们都维护一个以边权ccc结束的最多经过路径,每次加入一条边(u,v,c)(u,v,c)(u,v,c)就在vvv中查询以[0,c−1...原创 2020-02-03 11:58:08 · 394 阅读 · 0 评论 -
Center
一、题目二、解法我们首先做floydfloydfloyd,求出任意两点最短路,然后我们枚举一条边(u,v)(u,v)(u,v),其长度为ccc,设终点在这条边上,对于任意一个点iii,它的贡献是min(dis[i][u]+x,dis[i][v]+c−x)\min(dis[i][u]+x,dis[i][v]+c-x)min(dis[i][u]+x,dis[i][v]+c−x),我们要求的就是...原创 2020-01-21 19:09:45 · 187 阅读 · 0 评论 -
Codechef MARCH14 GERALD07加强版
一、题目点此看题二、解法考虑计算一个无向图联通块的数量,一个大致的思路就是用有贡献的边来算,道理很简单,就是如果加入一条边构成了环的话,那么这条边是没有贡献的,联通块数量为n−xn-xn−x,xxx为有贡献的边数。考虑计算这个边数,一个很重要的条件就是选的边是在[l,r][l,r][l,r]这个区间内的。如果我们从一开始加入边,很多没有贡献的边可能在区间询问的时候产生贡献,关键就在于替换环...原创 2020-01-17 22:57:47 · 140 阅读 · 0 评论 -
[SDOI2017]天才黑客
一、题目点此看题二、解法真的毒瘤,我 TM 搞了三个小时,调起来太 TM 爽了。言归正传,这道题很容易想到一个最短路解法,我们把每条边拆成两个点,它们之间的边权值都是原来的边权,然后对于每个点(原图),我们把入点和出点暴力连边,边权为lcplcplcp(字典树上lcalcalca的深度−1-1−1),这个做法可以拿到000分的高分,因为入点和出点相连时边数最多是m2m^2m2,然后时间复...原创 2020-01-12 10:58:48 · 690 阅读 · 0 评论 -
Tibbar的后花园
指数型生成函数(EGF)的应用,多项式exp原创 2019-12-29 22:45:18 · 210 阅读 · 0 评论 -
小奇的旅行计划
考虑固定lll,然后判断rrr。设计dp[l][x][y]dp[l][x][y]dp[l][x][y]为左端点为lll,xxx到达yyy的最小时间,转移略。如果dp[l][s][t]≤rdp[l][s][t]\leq rdp[l][s][t]≤r,那么就说明是YesYesYes,否则NoNoNo,这样做时间复杂度O(完全过不了)O(完全过不了)O(完全过不了)。考虑dp[l−1]dp[l-...原创 2019-11-11 20:11:22 · 2674 阅读 · 0 评论 -
跳跳棋
一、题目点此看题二、解法乍一看,这不是个搜索题吗?直接跑bfsbfsbfs,发现只有202020分qwqqwqqwq。发现每个状态都可以产生三种状态,我们把中间的棋子往两边跳视为当前状态到两个子状态,把两边的棋子往中间跳视为当前状态到一个父状态(至多有一个棋子满足跳的条件),这样原来的搜索就转化成了在一棵二叉树上找两点间的最短路,我们先求出这两个点的深度,然后把他们调整到同一个深度,再一步...原创 2019-10-13 10:54:19 · 296 阅读 · 1 评论 -
【模板】严格次小生成树[BJWC2010]
其实这并不是一个模板题一、题目点此看题二、解法发现次小生成树和最小生成树只有一条边的差异,为什么呢?考虑每一条不在最小生成树上的边如果加上去的增量,发现它是非负的,要生成次小生成树,肯定要最小化增量,所以只替换一条边是最优的。考虑每一条边去替换树上的边,先加入这条边,会与树形成一个环,发现环上的最大边就是我们替换的树边,但由于题目要求严格次小,就不能取和加入边权值相等的树边,暴力跑即可。...原创 2019-10-13 10:14:34 · 164 阅读 · 0 评论 -
物流运输
一、题目点此看题二、解法这道题得难点在于如何在限制点的情况下最短路和最小kkk值的决策,考虑动态规划。每一天的路径可以不改变路径形态,或者改变路径形态。发现在决策过程中,会出现相同且连续的路径形态,我们自然而然地想到了区间类型的dpdpdp,即对于本题,我们要对一个大区间分段,每断开一次都会导致为kkk的花费,而分段后区间带来的代价减少。设f[i]f[i]f[i]为对于[1,i][1,i...原创 2019-10-12 22:35:43 · 225 阅读 · 1 评论 -
华容道
一、题目点此看题二、解法考虑爆搜,可以直接移动空白格,据说可以移动空白格。爆搜为什么这么耗时呢?因为爆搜扩展了很多无用的状态,其实空白格不在指定棋子的周围的状态是无用的,我们可以选择性的扩展空白格在指定棋子旁边的状态,这样就达到了减少搜索范围的效果。由于移动到指定棋子的周围的状态不是连续的(bfsbfsbfs难以做到),我们可以用图论的方式来写,由于要点实在很多,文字表达出来太难了,可以...原创 2019-10-07 16:16:23 · 189 阅读 · 0 评论 -
逛公园
一、题目点此看题二、解法0x01 k=0直接写最短路计数,(可以顺手A这个和这个)。0x02 没有0边考虑到这道题kkk最大只有505050,把kkk放进dpdpdp中,定义dp[i][j]dp[i][j]dp[i][j]为到iii多走了jjj步(相较于最短路)...原创 2019-10-01 22:11:03 · 336 阅读 · 0 评论 -
Two Paths
一、题目题目给你一张可能有重边的不保证联通的无向图,现在要在这个图上找出两条路径,恰好能覆盖所有边一次,根据边的编号输出方案,无解输出-1。数据范围1≤m≤10000,1≤a,b≤10000,a̸=b1\leq m\leq 10000,1\leq a,b\leq10000 ,a\not=b1≤m≤10000,1≤a,b≤10000,a̸=b二、解法思路由于组成欧拉路的条件较为单一,...原创 2019-08-31 13:46:31 · 200 阅读 · 0 评论