![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
--------图论--------
文章平均质量分 65
Faithfully__xly
这个作者很懒,什么都没留下…
展开
-
多源最短路的学习&应用
还是接触了好几道多源最短路了。结果每次都发现自己并没有真正理解,做一道错一道(不过乐观一点想,也是做一道错一道学一道啦qwq)初次相遇:HDU6166官解:按照点的标号的每个二进制位分组,最多分20次(准确的说是17次)。每次会把某一位不同的点分开到起点和终点集,然后再起点终点互换,再做一次。正确性在于:对于任意两个点u和v,u和v是不同的点,必然有至少一个位不同,因此至少有一次他们被分到了...原创 2019-11-08 18:24:12 · 192 阅读 · 0 评论 -
NOIP2013华容道
Analysis拿到题后首选搜索然后人家暴力都是七八十我只有5分???不知道哪里dfs挂了至于一开始想到的bfs因为害怕死循环而不知道怎么打标记所以弃了翻了神仙的题解后,才意识到bfs有个重要的性质,第一次访问到的节点到达它的距离一定最小后面再到达就不优了,这个不仅可以用于剪枝,而且还可以避免重复走的情况...原创 2019-10-25 08:34:13 · 285 阅读 · 0 评论 -
(巧妙转化)欧拉回路 - Mike and Fish(CF547D )
传送门Analysis有点妙嘞。好题????每一行,每一列分别看作一个点同一个点的行列相连边显然会得到一个二分图而对于染色操作,等价于给每条边定向最后要求满足每个点的出入度之差<=1(是不是和今天这道考试题WOJ#4761有点像呢?只是变简单了,只有边权为1的情况)这个情况怎么分配来满足呢?考虑到欧拉回路的性质每个点的出度==入度我们就将原图变作欧拉回路,跑一跑即可(也...原创 2019-10-22 21:40:41 · 120 阅读 · 0 评论 -
CSP-S赛前专题总结
图论最短路生成树强连通差分约束拓扑排序欧拉图最短路1.建模:将原问题转化通过某种性质转化为图论问题注意: 建图的时候是否可以优化(是否加了一些对答案无影响的边) 和某些特定数量的点有关,考虑枚举。(枚举时也可以优化,比如只枚举前几个,便可以推出最后一个,诸如此类) 一些需要用到的值,考虑预处理。枚举+拼凑答案可以建模的情况:最值(e.g.墨墨的等式)...原创 2019-10-20 23:30:12 · 155 阅读 · 0 评论 -
二分+Kruskal - Tree(BZOJ 2654)
描述给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。 题目保证有解。输入第一行V,E,need分别表示点数,边数和需要的白色边数。接下来E行每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色)输出一行表示所求生成树的边权和。样例输入 [复制]2 2 10 1 1 10 1 2 0样例输出 [复制]...原创 2019-02-17 21:54:57 · 170 阅读 · 0 评论 -
拓扑排序|Tarjan - 传话 「CODEVS1506」
题目描述[问题描述]兴趣小组的同学来自各个学校,为了增加友谊,晚会上又进行了一个传话游戏,如果a认识b,那么a收到某个消息,就会把这个消息传给b,以及所有a认识的人。如果a认识b,b不一定认识a。所有人从1到n编号,给出所有“认识”关系,问如果i发布一条新消息,那么会不会经过若干次传话后,这个消息传回给了i,1<=i<=n。[输入文件]输入文件message.in中的第一行...原创 2018-11-04 14:28:06 · 303 阅读 · 0 评论 -
树的直径 - Cow Marathon(POJ 1985)
传送门Analysis这道题的方向没有任何用……不用管然后就是一个模板题了求树的直径两遍dfs(或bfs),或者是树形dp(维护最大值和次大值)Code#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;cmath&gt;#define in read()#define N 40009#defin原创 2018-11-02 07:55:17 · 110 阅读 · 0 评论 -
NOIP2015提高组Day2T3- 运输计划
传送门Tips如果两个点的LCA会被反复用到,就可以拿一个数组存下来,避免反复计算Analysis又是一道好喵喵喵妙的题啊!!!树上差分太棒了,简直太厉害不过首先我们得看出来这是一道二分可以解决的问题然后问题就变成了怎么check看看gsj大佬怎么说吧Code注意常数因子带来的程序效率上的影响。所以树链剖分貌似要快得多但……hhh,写的倍增#include<bi...原创 2018-11-06 21:06:57 · 213 阅读 · 0 评论 -
NOIP2017提高组DAY1T3 - 逛公园(超详细&两种做法)
传送门Analysis首先看到这道题,暴力30分很好打针对k=0k=0k=0的情况,我们直接最短路计数就可以了然后还是从k入手,发现k最多只有50,是个突破口我们可以试着每次枚举k,限制路径长度然后计数,最后相加如果令f[u][j]f[u][j]f[u][j]表示当前在u这个点,与 u 到 1 的最短路相差 j 的路径条数那么怎么更新这个状态呢?令 v 能够到 u 那么可以得到:...原创 2018-11-03 21:46:26 · 769 阅读 · 0 评论 -
树链剖分换根【模板】
树的操作描述XXX和 YYY在愉快地刷题。有一道题是这样的:给你一棵 n 个节点的有根树,每个节点有 一个权植。你要支持两种操作:查询以某棵树为根的子树的权值和,给以某个节点为根的整 棵子树的所有点的权值都加上一个值。机智的 XXX 很开心地用LLL教授 讲过的某些东西水水水水过了这道题。但是可怕的出题人又增加了一种操作:将根节点改为第 u 号节点。于是XXX和YYY 就不会 做了。按照一惯...原创 2018-11-01 17:56:58 · 372 阅读 · 0 评论 -
NOIP2017提高组DAY2T1 - 奶酪
题意输入每个输入文件包含多组数据。输入文件的第一行,包含一个正整数 T,代表该输入文件中所含的数据组数。接下来是 T 组数据,每组数据的格式如下:第一行包含三个正整数 n, h 和 r, 两个数之间以一个空格分开,分别代表奶酪中空 洞的数量,奶酪的高度和空洞的半径。接下来的 n 行,每行包含三个整数 x、 y、 z, 两个数之间以一个空格分开, 表示空 洞球心坐标为(x, y, z)...原创 2018-11-01 17:49:27 · 345 阅读 · 0 评论 -
1024 - Tarjan之割点 - BLO(BZOJ1123)
传送门分析很容易发现如果删除的点不是一个割点的话,它对答案的贡献就只有2*(n-1)(和除自己以外的所有点断开了)考虑是割点的话,如果把与割点相连的所有边都去掉,则图将变成很多个联通块,而这些联通块只会有三种形态1.割点2.与割点相连的子节点和这些子节点的儿子3.除开上面的点,剩下的点对于每一个联通块,其对答案的贡献就是(设联通块的大小为sze[u])sze[u]∗(n−sze[...原创 2018-10-24 14:02:34 · 165 阅读 · 0 评论 -
1026 - Kruskal重构树 - 货车运输(NOIP2013提高组)
传送门牢骚完全不知道自己在想什么……明明就是简单的最大生成树+倍增非要弄一个Kruskal重构树+树链剖分不管不管,反正我就是这么写了╭(╯^╰)╮洛谷数据不错,记得判连通性类比Tarjan算法分析题目就是要求两个点路径之间的最小边权最大显然,我们做一遍最大生成树然后树上倍增,求最小值即可但偏不这样搞我们要优雅,优雅,优雅用Kruskal重构树,嗯……听名字就很...原创 2018-10-26 20:15:25 · 164 阅读 · 0 评论 -
1026 - 最小瓶颈路 - Network(BZOJ3732)
传送门分析各路大佬都用Kruskal重构树在搞小蒟蒻就先打一个简单的最小瓶颈路求两点之间路径上的最大边权最小显然,为了使最大的边权最小我们就用边权最小的边将整个图联通(最小生成树)那么此时最小瓶颈路肯定在这颗最小生成树上我们就树上lcalcalca维护maxn[x][i]maxn[x][i]maxn[x][i]表示从 xxx开始向上走 2i 步 这段距离的最大值更新的话,和fa...原创 2018-10-26 18:17:53 · 188 阅读 · 0 评论 -
Tarjan缩点+拓扑排序求最长链 - 最大半连通子图「BZOJ1093」[ZJOI2007]
最大半连通子图描述一个有向图 G=(V,E)称为半连通的 (Semi-Connected),如果满足:∀u,v∈V,满足 u→v 或 v→u,即对于图中任意两点 u,v,存在一条 u到 v 的有向路径或者从 v 到 u 的有向路径。若 G′=(V′,E′)满足,E′ 是 E 中所有和 V’ 有关的边,则称 G’ 是G 的一个导出子图。若 G’ 是 G 的导出子图,且 G’ 半连通,则称 G’...原创 2018-11-04 15:18:03 · 323 阅读 · 0 评论 -
NOIP2009提高组Day?T3 - 最优贸易
传送门Analysis两遍SPFA1.求出1~i的路径上点权最小值 mn[i]mn[i]mn[i]2.求出i~n的路径上点权最大值 mx[i]mx[i]mx[i]最后枚举每一个点作为出售点,mx[i]−mn[i]mx[i]-mn[i]mx[i]−mn[i]得到答案喵喵喵,太妙了!!!这道题结合了反向建图+SPFA最短路思想看了题解发现很简单,但自己就是没想到只能乱搞拿到20分,...原创 2018-11-04 21:53:55 · 122 阅读 · 0 评论 -
Floyd最短路 - 牛的旅行 Cow Tours
传送门Analysis比较基础了先用Floyd求出任意相连的两点的最短路,然后预处理出每一个点往外最多能延伸的长度mx[i]最后暴力N2枚举加边但需要注意一点,有可能你加入的边是你能加的最小直径了,但这个“直径”并不是牧场中最远两点的距离所以你还要将加边后求出来的直径长度与不加边时的直径长度取max注意一点,在求mx[i]的时候不能想着方便就一边做Floyd一边在中途取max因为...原创 2018-11-10 15:23:17 · 300 阅读 · 0 评论 -
基环树
基环树找环有向图:void getloop(){ int x=1; memset(cir,false,sizeof(cir)); while (!cir[x]) cir[x]=true,x=pre[x]; lis[0]=0; memset(cir,false,sizeof(cir)); while (!cir[x]) lis[++...原创 2019-08-22 16:50:58 · 155 阅读 · 0 评论 -
棋盘类二分图匹配 - Chessboard(POJ 2446)
传送门Analysis可以根据i和j性质可以看出,i+j为奇数的上下相邻的i’和j’一定是偶数,那么一个1*2的纸片的i+j一定是一个奇数一个偶数。所以建立一个二分图两个集合,将i+j为奇数的点与上下左右相邻的点连在一起,当然点不是洞。最后就用匈牙利算法求最大匹配数Code#include<cstdio>#include<iostream>#include&...原创 2019-08-14 15:40:09 · 140 阅读 · 0 评论 -
最小乘积生成树 - Timeismoney(BZOJ2395)
Analysis学习ing最小乘积生成树Code/* created by xly*/#include<bits/stdc++.h>#define in red()#define re registerusing namespace std;inline int red(){ char ch;int f=1,res=0; while((ch=getchar(...原创 2019-08-14 09:57:26 · 189 阅读 · 0 评论 -
长链剖分 - 秘术「天文密葬法」(COGS2652)
传送门一句话题意给个树,第i个点有两个权值ai和bi,现在求一条长度为m的路径,使得Σai/Σbi最小花痴三秒啊!!!颤抖的人类指针是真的棒(๑•̀ㅂ•́)و✧太神奇啦,吹爆指针大佬%%%Analysis0/1分数规划+长链剖分维护路径点权和分数规划的部分也就很简单了,将原式变形为∑a−k∑b≤0\sum a-k\sum b\le 0∑a−k∑b≤0现在把每个点的点权化为...原创 2019-07-22 20:03:35 · 251 阅读 · 0 评论 -
长链剖分 - lxhgww的奇思妙想(Vijos)
传送门Analysis长链剖分(可能是重链剖分他兄弟吧)我们预处理出每个点向上2的幂次祖先fa[k][u],每一条重链的链顶向上、向下重链长度个点。(储存在vector中,由于重链长度和不超过n,所以空间、时间都是O(n)的)对于询问求u的k次祖先,我们可以拆成r+(k−r)次祖先,其中r是k的最高二进制位,r次祖先u·可以用fa[k][u]得到。由于性质1。所以我们可以在top[u`]...原创 2019-07-22 16:13:33 · 138 阅读 · 0 评论 -
长链剖分 - 攻略(BZOJ3252)
Analysis其实和长链剖分关系不大就是一个贪心按照点权和的大小划分轻重链,然后将所有的链排个序,选前k个即可Code#include<bits/stdc++.h>#define in read()#define re registerusing namespace std;inline int read(){ char ch;int f=1,res=0; ...原创 2019-07-25 19:02:07 · 161 阅读 · 0 评论 -
最短路树+并查集 - 安全出行Safe Travel(usaco 2009)
描述输入第一行: 两个空格分开的数, N和M第2…M+1行: 三个空格分开的数a_i, b_i,和t_i输出第1…N-1行: 第i行包含一个数:从牛棚_1到牛棚_i+1并且避免从牛棚1到牛棚i+1最短路经上最后一条牛路的最少的时间.如果这样的路经不存在,输出-1.样例输入4 51 2 21 3 23 4 43 2 12 4 3样例输出336Analysis只...原创 2019-02-19 15:53:28 · 438 阅读 · 0 评论 -
Kruskal+dfs - 最小生成树计数 BZOJ1016[JSOI2008]
描述现在给出了一个简单无向加权图。你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的 最小生成树。(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)。由于不同的最小生 成树可能很多,所以你只需要输出方案数对31011的模就可以了。输入 第一行包含两个数,n和m,其中1<=n<=100; 1<=m<=1000; 表示该无向图的节点数和...原创 2019-02-19 11:42:40 · 207 阅读 · 4 评论 -
分层图(网络流)- 孤岛营救问题(luogu 4011)
传送门牢骚写在前面好久好久没有更过博客了上一篇板子纯粹是为了自己记住,都没有好好写过题解了自从考完noip,整个人都颓了,连“退役记”“游记”都没有写不过,这些都不重要了我还在这条路上摸爬滚打着博客还是要更的就像是日子总要过下去Analysis建图好题!听说状压也可以乱搞,不过我还是乖乖练习一下建图思考在一张图上,按照常规思路建图,然后跑最短路如果没有钥匙,显然是可以...原创 2019-01-23 09:30:14 · 297 阅读 · 1 评论 -
差分约束 - 糖果「BZOJ2330」[SCOI2011]
传送门分析差分约束:答案求最小值,不等式变形为“>=",跑最长路答案求最大值,不等式变形为"<=",跑最短路对于这道题,根据操作选择点连边最后,不要忘了隐含条件:每个人至少分一个糖果,所以就是d[i]&gt;=1d[i]&gt;=1 d[i]>=1d[i]−0&gt;=1d[i]-0&gt;=1d[i]−0>=1从0往 i 建...原创 2018-10-29 21:56:54 · 179 阅读 · 0 评论 -
二分图染色 - 双栈排序(NOIP2008提高组)
题目描述Tom 最近在研究一个有趣的排序问题。如图所示,通过 2 个栈 S1 和 S2,Tom希望借助以下 4 种操作实现将输入序列升序排列。操作a:如果输入序列不为空,将第一个元素压入栈 S1操作b:如果栈 S1 不为空,将 S1 栈顶元素弹出至输出序列操作c:如果输入序列不为空,将第一个元素压入栈 S2操作d:如果栈 S2 不为空,将 S2 栈顶元素弹出至输出序列如果一个...原创 2018-10-31 12:40:53 · 175 阅读 · 0 评论 -
【2018/10/05】T3 -Dfs序+树上差分 - 相遇
相遇描述豪哥生活在一个n个点的树形城市里面,每一天都要走来走去。虽然走的是比较的多,但是豪哥在这个城市里面的朋友并不是很多。当某一天,猴哥给他展现了一下大佬风范之后,豪哥决定要获得一些交往机会来提升交往能力。豪哥现在已经物色上了一条友,打算和它(豪哥并不让吃瓜群众知道性别)交往。豪哥现在spy了一下这个人的所有行程起点和终点,豪哥打算从终点开始走到起点与其相遇。但是豪哥是想找话题的,他...原创 2018-10-07 21:49:42 · 364 阅读 · 0 评论 -
1012 - trie树&树上异或 - The XOR Longest Path(POJ 3764)
传送门 题意给定一个有n个节点的树,每条边上有个边权,从树中任选两个节点 x 和 y ,把 x 到 y 的路径上所有边权xor起来,求最大值 分析xor???有意思,还记得异或的自反性吗(a^b^b=a,a^0=a)我们发现若将 x 到根路径上的所有边权异或起来,记作 d[x];y 到根路径上的所有边权异或起来,记作 d[y]那么 d[x] xor d[y] 就是 ...原创 2018-10-13 22:24:49 · 333 阅读 · 0 评论 -
树上信息维护【讲解+代码】
dfs序一棵树被 dfs 时所经过的节点的顺序。一般的作用是维护子树信息,如果记录 dfn[i] 表示 i 号点的 dfs 序,sze[i] 表示 i 号点的子树大小那么 x 是 y 的祖先等价于: dfn[y] ∈ [ dfn[x] , dfn[x] + sze[x] − 1] 树上操作:单点加 单点求值 子树加 子树求和 链加 链求和链加:将节点x到y最...原创 2018-10-06 20:51:18 · 338 阅读 · 0 评论 -
【2018/10/04】T3 - 边双连通分量+树形dp - 航班
航班描述L因为业务繁忙,经常会到处出差。因为他是航空公司的优质客户,于是某个航空公司给了他一个优惠券。他可以利用这个优惠券在任何一个国家内的任意城市间免费旅行,当他的路线跨国才会产生费用。L有一个航空公司的价格表与航线。而且每个城市出发都能到所有的城市,2个城市间可能有不止一个航班,一个国家内的2个城市间一定有不同的路线,但是不同国家的城市间只有一条路线。L想知道从每个城市出发到产生费...原创 2018-10-04 16:35:23 · 315 阅读 · 0 评论 -
每日一道模板题-10/11 - 点的距离【lca】
题意:给定一棵 n 个点的树,Q 个询问,每次询问点 x 到点 y两点之间的距离。 分析:没什么好分析的…… 代码:#include<bits/stdc++.h>#define N 100009using namespace std;int n,q;int nxt[2*N],to[2*N],head[N],w[N*2],cnt=0;void ad...原创 2018-10-11 19:20:59 · 410 阅读 · 0 评论 -
0926-Tarjan缩点-间谍网络(luogu P1262)
传送门 分析很明显,这道题与节点的度有关。如果一个点的入度为0,则我们必然要贿赂他。但是如果单纯的考虑度就错了。我们忽略了一种入度全部大于0的情况——环。样例就是一个例子。这时如果我们再拓扑找环再去找最小值,我们就会花大量时间(毕竟边很多)。这时就要用到Tarjan缩点。Tarjan是一种很高效的求解有向图的强连通分量的算法,但是它的主要应用之一是缩点,也就是把整个强连通分量的一定...原创 2018-09-26 12:12:29 · 150 阅读 · 0 评论 -
0924-安徽省选 2002-哈利●波特与魔法石
题目描述某天,哈利•波特准备去拯救 Super Swamuel 星球上的生灵。该星球上有七种不同的地形,依次分别是:石子路、森林、草地、山地、雪地、沼泽和沙漠。分别用数字 1~7 来表示,穿越这七种地形需要的时间分别用 h1~h7 表示。任意两个城市之间都存在至少一条通路,而且任意两个直通的城市之间都只存在一种地形。哈利•波特穿越地形 u 所需要的时间与该地形的区域大小无关,而与地形 u ...原创 2018-09-24 22:20:40 · 250 阅读 · 0 评论 -
0902-图论+模拟(水题)-洛谷P2661 信息传递
传送门大致题意给出 n 个点,每个点只有一条出边,可以有多条入边,求图中最小环分析本以为是并查集判环,结果看到题的第一眼就觉得可以用tarjan,最后选择了深搜【笑哭】思路:从入度为0 的点开始往下深搜,记录一个时间戳,如果节点 u 的dfn 大于它到达的节点 v 的dfn,就说明 v 先于 u 出现,而又被 u 搜到,则肯定构成一个环,而这个环的大小就是 dfn [ u ...原创 2018-09-02 11:46:50 · 152 阅读 · 0 评论 -
【2018/08/30】T3-图论-graph(SDOJ 3740)
题目描述:给你一个图,一共有 N 个点,2 * N - 2 条有向边。边目录按两部分给出(1)开始的 N-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点到达。(2)接下来的 N-1 条边,一定是从 i 到 1(2 ≤ i ≤ N)的有向边,保证每个点都能到 1。有 q 次询问:1 x w :表示将第 x 条边的边权修改为 w2 u v :询问 u 到...原创 2018-09-01 16:25:12 · 308 阅读 · 0 评论 -
【2018/08/29】T2-拓扑排序-table (SDOJ 3728)
表格 给出一个表格,N 行 M 列,每个格子有一个整数,有些格子是空的。现在需要你来做出一些调整,使得每行都是非降序的。这个调整只能是整列的移动。 【输入】 第一行两个正整数 N 和 M。 接下来 N 行,每行 M 个整数,-1 表示这个格子是空的,其他的整数都在 [0, 10^9]范围,表示格子的数字。 【输出】 若无解,输出 -1; 否则输出任意一个解,即一行 M 个正整...原创 2018-08-29 16:09:53 · 207 阅读 · 4 评论 -
0819-最短路-洛谷P1828 香甜的黄油
传送门 分析最短路模板,dijkstra+堆优化或者 spfa 都可以做,floyd 就别来啦枚举每一个可能作为放糖的牧场,然后最短路跑一遍求出每个牧场到该牧场的最短距离,累加,打擂台,得出答案我一直被卡在建边上,之前偷懒用的矩阵存储,一直TLE,后来改回邻接表,分分钟AC,所以啊建边一定要用邻接表,血的教训啊 代码#include<cstdio>#...原创 2018-08-19 15:09:08 · 294 阅读 · 0 评论 -
1014 - Prim最小生成树 - 打井(usaco2009oct)
打井Watering Hole描述农民John 决定将水引入到他的n(1<=n<=300)个牧场。他准备通过挖若干井,并在各块田中修筑水道来连通各块田地以供水。在第i 号田中挖一口井需要花费W_i(1<=W_i<=100,000)元。连接i 号田与j 号田需要P_ij (1 <= P_ij <= 100,000 , P_ji=P_ij)元。请求出...原创 2018-10-14 14:50:54 · 251 阅读 · 0 评论