图论
文章平均质量分 52
wind__whisper
qwq
展开
-
CF1494F Delete The Edges(欧拉回路)
欧拉路径原创 2022-07-17 20:04:39 · 213 阅读 · 0 评论 -
P5590 赛车游戏(差分约束)
差分约束原创 2022-06-20 17:32:48 · 367 阅读 · 0 评论 -
P5801 [SEERC2019]Game on a Tree(博弈论)
博弈论原创 2022-05-16 08:58:03 · 241 阅读 · 0 评论 -
P3226 [HNOI2012]集合选数(状压、构造)
耳目一新的构造原创 2022-04-26 11:57:01 · 171 阅读 · 0 评论 -
模板:矩阵树定理
矩阵树定理原创 2022-03-17 15:24:06 · 389 阅读 · 0 评论 -
P7516 [省选联考 2021 A/B 卷] 图函数
人类智慧原创 2022-03-16 00:45:00 · 270 阅读 · 0 评论 -
洛谷P7515:矩阵游戏(差分约束)
差分约束原创 2022-02-27 10:15:33 · 3587 阅读 · 0 评论 -
洛谷P6054:开门大吉
网络流建模练习原创 2022-01-29 17:12:45 · 1455 阅读 · 0 评论 -
P3243 [HNOI2015]菜肴制作(拓扑排序、贪心)
解析很好的题也就是我没做出来的意思反向思维似乎是我欠缺的这道题也是也许做题时应该多特意往这边想想当正向看并没有太好的性质时,也许反过来能使题目豁然开朗容易想到暴力n方如何做(以下均指反图)找到1所在的点,染色找到其导出的子图,在其中再找到最小的点,再求导出图…直到子图大小为1时,把结点放到当前答案序列的开头那么不难发现,每个点导出的子图都是占据答案序列上连续的一段,同时最小的结点会在这一段的最后然后…我就发现不出来了…考虑反过来想答案序列最后一个点,必然是入度为0的编号最大的点因原创 2021-11-18 20:56:39 · 419 阅读 · 0 评论 -
CF1500C Matrix Sorting(拓扑排序)
解析神仙题我想到了一部分,但是由于没想到倒着做,后面越想越复杂…本题的关键是要倒着想考虑最后一次排序的列x必须是单调不增的否则直接错然后倒数第二列y必须在x列相等的段内单调不增,因为这些地方x无法起到排序的作用同理再到倒数第三列…那么这个怎么实现呢?拓扑排序!考虑一列中肯定有一些相邻的逆序对如果这个逆序对已经被前面的覆盖过,就没关系一个列如果所有的逆序对都被覆盖,就可以使用了考虑将列操作和相邻行分别看作点,连边即可逆序对只要被遍历到即可入队列操作只有入度减为0才能入队代码原创 2021-11-17 13:23:02 · 185 阅读 · 0 评论 -
CF1137C:Museums Tour(缩点、分层图)
解析比起CF,更像是主题库的一道题也是很好的一道题由于可以在环里转圈,容易想到缩点但是出现了一个问题:缩点是无法统计一个强连通分量里有哪些环及其大小的而本题中显然环的大小和d的关系至关重要考虑转换思路把每个城市x割成d个点(x,1)到(x,d)每个点表示第i天到达该城市对新图跑tarjan每个分量记录其不同的博物馆的数目可以利用一个带标记的桶来解决最后跑一遍简单的dp即可为什么这样不会重复统计?假设(x,i)走到了不在同一个分量里的(x,i+w),使城市x被统计了两遍那么x就在原创 2021-11-15 11:50:40 · 326 阅读 · 0 评论 -
CF453C:Little Pony and Summer Sun Celebration(dfs、构造)
解析比较巧妙的一道题首先左一棵dfs生成树出来尝试把它的欧拉序列作为答案但是这样可能会有的地方不符合条件如果x点的奇偶性不符合,就在序列中加入一个(x,fa)同时改变x和fa的奇偶性显然不会超过4*n如果根需要改奇偶性怎么办?最后一次回溯删掉就行了代码#include<bits/stdc++.h>using namespace std;const int N=4e5+100;const int mod=1e9+7;double eps=1e-10;#define原创 2021-11-12 11:03:29 · 103 阅读 · 0 评论 -
兰道定理(竞赛图)
所谓兰道定理,就是兰道定下的道理(逃)解析每条边被规定了方向的完全图叫做竞赛图竞赛图中,设每个点的出度为uiu_iui显然有:∑ui=n×(n−1)2\sum u_i=\dfrac{n\times(n-1)}{2}∑ui=2n×(n−1)而兰道定理的内容是:若n个点的出度序列升序排序后为sis_isi,那么其能构成竞赛图的充要条件是,对于任意的k属于[1,n],都有:∑i=1ksi>=k×(k−1)2\sum_{i=1}^ks_i>=\dfrac{k\times(k.原创 2021-11-12 10:31:32 · 1024 阅读 · 2 评论 -
CF508D Tanya and Password(欧拉回路)
解析之前模拟考过的一道题把字符串当成前后缀之间的连边即可注意即使图的度数符合要求,也可能由于不连通而无解,需要再特判一下#include<bits/stdc++.h>using namespace std;#define ll long long#define ull unsigned long longconst int N=2e5+100;ll read() { ll x=0,f=1;char c=getchar(); while(!isdigit(c)) {if(c=原创 2021-11-10 11:40:36 · 254 阅读 · 0 评论 -
NOIP2014&洛谷P2296:寻找道路(bfs)
解析杀鸡焉用AS47做的巨差的一道题WA3遍+写的巨麻烦+复杂度被吊打qwq说起来很玄学,但第一交之前就有一种强烈的预感觉得自己会WA一开始像个傻子一样对有环图上记搜WA了还不知道为啥…可能真是傻了吧qwq过了一会看着lojn=50,m=800干瞪了会眼后终终终于发现了bug然后就无脑上了个tarjan怎么说呢…切了倒是切了…但是看到题解真是苦笑不得bfs大法好!!!首先,判断每个点是否能走到t,可以直接在反图上dfs然后求最短路由于边权均是1也可以直接bfs就行了真是醉原创 2021-11-03 23:49:47 · 134 阅读 · 0 评论 -
NOIP2017&洛谷P3953:逛公园(分层图最短路、dp、拓扑)
解析容易想到dp先跑一遍最短路把每个点的dis求出来设计dpu,xdp_{u,x}dpu,x表示结点u多走了x的方案数dp按照dis升序排列后,从前到后转移即可如果有0边,求出只有0边时的拓扑序,作为第二关键字进行排序关于0环,第一篇题解的拓扑似乎是假的…利用dfs和记搜就是真的了但是不想改了代码#include<bits/stdc++.h>using namespace std;#define ll long long#define il inline#defin原创 2021-11-01 11:58:09 · 394 阅读 · 0 评论 -
模板:次短路
所谓次短路,就是又次又短的路(逃)解析使用两遍swap是更新sec的好方法一定要判断是严格次短才更新sec的答案!代码#include<bits/stdc++.h>using namespace std;#define ll long long#define il inlineconst int N=200050;inline ll read(){ ll x=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-'.原创 2021-10-29 08:23:39 · 92 阅读 · 0 评论 -
CSP2019&洛谷P5666:树的重心
解析毒题细节有亿点点多我一开始的思路是没有问题的尝试统计有多少种方案能砍出大小在一个区间的子树、当时的想法是线段树合并但是这个玩意在需要保留原树的情况下空间复杂度炸没了…因为我垃圾的实现一个dfs里面就玩了七遍merge函数…空间常数飞起然后分数就和暴力一毛一样qwq考虑一些更灵巧的做法动态维护一个关于值域的树状数组要求一个子树内的答案用遍历到子树根前后的结果相减子树外就是最终的结果减去子树内结果然后我这个垃圾的实现似乎还需要再开一个树状数组动态维护返祖链的答案…虽然实现还是原创 2021-10-16 20:39:25 · 325 阅读 · 0 评论 -
CSP2020&洛谷P7077:函数调用
解析没做出来…qwq自己只能想到拓扑开vector把每个函数搞成一个奇怪的加法标记和乘法标记的结合极限数据卡一卡还是nm的得分纯玄学qwq本题的关键是乘法相当于把函数调用多次这样就可以利用和全是加法类似的策略拓扑统计每个函数的调用次数使问题得以解决要注意部分分的提示性!(尤其是特殊限制)代码#include<bits/stdc++.h>using namespace std;#define ll long longconst int N=1e5+100;const原创 2021-10-15 00:17:29 · 186 阅读 · 0 评论 -
LOJ:相框(欧拉回路、分类讨论)
解析本题是一道if的板子题抓住关键:使所有点的度数全变为2首先对于度数大于2的点,把它分为若干2度点(和可能的一个单点)现在我们只剩下单点和二度点了接下来分来讨论一下若有多个连通块,我们要把它们变成链再拼起来所以我们要把所有连通块的各自的单点拚到只剩下一个最后把所有链拼起来若只有一个连通块,把所有的1度点合并即可对于0的处理:开一个新点代码#include<bits/stdc++.h>using namespace std;#define ll long long原创 2021-10-13 09:31:02 · 137 阅读 · 0 评论 -
LOJ:蚂蚁之旅(欧拉回路)
题意描述给你无向图的NNN个点和MMM条边,保证这 条边都不同且不会存在同一点的自环边,现在问你至少要几笔才能所有边都画一遍。(一笔画的时候笔不离开纸)解析无向图中,若一个图是连通的,且奇数度个数的点不超过2个时,必定可以一笔画完否则一笔可以消灭两个奇数度点,所以笔数为奇数度点个数/2所以考虑所有连通块即可代码#include<bits/stdc++.h>using namespace std;#define ll long longconst int N=4e5+100;原创 2021-10-12 18:32:13 · 193 阅读 · 0 评论 -
LOJ&洛谷P3225:矿场搭建(割点、点双)
文章目录解析代码解析我的实现不够简洁,导致bug越调越谜…关键就是**找被割点分开的分量的方法:dfs!!!一下子就豁然开朗了代码#include<bits/stdc++.h>using namespace std;#define ll long longconst int N=2e3+100;const double eps=1e-6;inline ll read(){ ll x=0,f=1;char c=getchar(); while(!isdigit(c))原创 2021-10-12 10:33:23 · 154 阅读 · 0 评论 -
LOJ:出纳员问题(差分约束)
解析毒瘤题思路的关键是利用前缀和建图,枚举sum[24]点值(其实可以二分)主要是细节的处理不够清晰使下标从1开始会一下子好做起来然后把0当做源点差分约束一定要有源点!!代码#include<bits/stdc++.h>using namespace std;#define ll long longconst int N=5e5+100;const double eps=1e-6;inline ll read() { ll x=0,f=1; char c=getc原创 2021-10-11 21:41:06 · 281 阅读 · 0 评论 -
LOJ:黑暗城堡(最短路)
题目描述求一个图关于1的最小路径树的方案数解析想复杂了qwq跑dij的时候如果dis[now]+w==dis[to],就使cnt[to]++如果更新dis,cnt赋值成1最后乘起来即可本题可以这样应该是因为由于边权均正,所以所有点的选取方案是独立的所以直接上乘法即可代码#include<bits/stdc++.h>using namespace std;#define ll long long#define il inlineconst int N=1e6+100;原创 2021-10-10 23:11:47 · 182 阅读 · 0 评论 -
YBTOJ&洛谷P3209:平面图判定(2-SAT)
文章目录解析代码传送门解析关键性质是一个定理:若m>3*n-6,必然不存在合法的平面图这谁知道啊不过这题应该往也许图过于稠密时必然无解这方面想所以我们只需要考虑m、n同阶的情况就行了这个时候我们直接暴力判断跑2-SAT就行了代码#include<bits/stdc++.h>using namespace std;#define ll long longconst int N=35605;const int M=30005;const int mod=998244原创 2021-09-26 10:53:18 · 197 阅读 · 0 评论 -
模板:2-SAT问题
文章目录所谓2-SAT,就是解决两个SAT的问题(逃)原创 2021-09-25 23:47:35 · 117 阅读 · 0 评论 -
YBTOJ&洛谷P1407:稳定婚姻(强连通分量)
文章目录题目描述解析代码题目描述我们已知n对夫妻的婚姻状况,称第 i 对夫妻的男方为 Bi ,女方为 Gi。若某男 Bi 与某女 Gi 曾经交往过( i!=j ),则当某方与其配偶(即 Bi 与 Gi 或 Bj 与 Gj)感情出现问题时,他们有私奔的可能性。不妨设 Bi 和其配偶 Gi 感情不和,于是 Bi 和 Gj 旧情复燃,进而 Bj 因被戴绿帽而感到不爽,联系上了他的初恋情人 一串串的离婚事件像多米诺骨牌一般接踵而至。若在 Bi 和 Gj 离婚的前提下,这 n 个人最终依然能够结合成 n 对原创 2021-09-22 18:27:41 · 243 阅读 · 0 评论 -
YBTOJ&洛谷P4068:数字配对(网络流)
文章目录题目描述解析代码题目描述有n种数字,第 i 种数字是 ai,有 bi个,权值是 ci。若两个数字 ai,aj 满足, ai 是 aj 的倍数,且 ai/aj 是一个质数,那么这两个数字可以配对,并获得 ci*cj 的价值。一个数字只能参与一次配对,可以不参与配对。在获得的价值总和不小于 0 的前提下,求最多进行多少次配对。解析很神奇的题考虑限制条件的转化把每个数字进行质因数分解,设 ai 的质因子个数为 cnti那么ai、aj可以配对的充要条件为1.ai | aj2.cnt原创 2021-09-22 09:39:53 · 300 阅读 · 0 评论 -
YBTOJ:放置棋子(费用流)
文章目录题目描述解析代码题目描述有一个n*n的棋盘,可以在上面放棋子。有些格子不能放棋子,有些格子必须放棋子,剩下的格子随意。要求放好棋子之后满足如下两条要求:第 i 行和第 i 列的棋子数目必须一样多。第 i 行的棋子数目不能超过总的棋子数目的 a/b。求最多可以另外放多少个棋子(除掉必须放的)。如果无解输出 impossible。解析神仙题这谁能想到是网络流啊… qwq考虑正难则反,考虑舍弃哪些棋子对于一个可以放弃的棋子(i,j)(i,j)(i,j),就从 i 连一条向 j原创 2021-09-21 22:30:11 · 248 阅读 · 2 评论 -
YBTOJ&洛谷P2223:软件开发(费用流)
文章目录题目描述解析代码题目描述某软件公司正在规划一项nnn天的软件开发计划,根据开发计划第iii天需要nin_ini个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员每天提供一块消毒毛巾,这种消毒毛巾使用一天后必须再做消毒处理后才能使用。消毒方式有两种,A 种方式的消毒需要aaa天时间,B 种方式的消毒需要bbb天,A 种消毒方式的费用为每块毛巾faf_afa,B 种消毒方式的费用为每块毛巾fbf_bfb,而买一块新毛巾的费用为fff(原创 2021-09-21 18:17:17 · 133 阅读 · 1 评论 -
YBTOJ:炮塔攻击(网络流)
题目描述小明最近在玩一款很好玩的游戏,游戏规则是这样的:有一个n∗mn*mn∗m的地图,地图上的每一个位置要么是空地,要么是炮塔,要么是一些敌人,小明需要操纵炮塔攻击敌人。攻击方法是:对于每个炮塔,游戏系统已经给出它可以瞄准的方向(上、下、左、右其中一个),小明需要选择它的攻击位置,每一个炮塔只能够攻击一个位置,炮塔只能够向着它的瞄准方向上的某个位置发动攻击,当然炮塔也可以不进行攻击。炮塔威力强大,它可以且仅可以消灭目标位置上所有敌人。出于安全考虑,游戏系统已经保证不存在一个炮塔能够瞄准另外一个炮塔原创 2021-09-20 19:39:56 · 369 阅读 · 0 评论 -
YBTOJ:矛盾指数(网络流-最大权闭合图)
文章目录题目描述解析代码网络流要大胆建图题目描述公司内部共nnn个员工,员工之间可能有矛盾。若员工uuu和员工vvv有矛盾,用边(u,v)(u,v)(u,v)表示,共mmm个矛盾。现在公司决定裁员,使得被裁人员间的矛盾指数最高。矛盾指数定义为被裁人员间的矛盾总数与被裁人员数的比值解析感觉很神仙的题一开始自己的思路是暴力枚举裁员人数求最大矛盾,但是如何强制控制裁员人数把我卡住了…(费用流或许能做?)最后还是看了题解qwq关键是建图的方法把每个职员和每条矛盾关系都看作一个点,那么(u,v原创 2021-09-20 17:28:43 · 186 阅读 · 0 评论 -
YBTOJ危桥通行&洛谷P3163:危桥通行(网络流)
文章目录题目描述解析代码题目描述Alice 和 Bob 居住在一个由 NN 座岛屿组成的国家,岛屿被编号为 00 到 N-1N−1。某些岛屿之间有桥相连,桥上的道路是双向的,但一次只能供一人通行。其中一些桥由于年久失修成为危桥,最多只能通行两次。Alice 希望在岛屿 a1和 a2 之间往返 an次(从 a1 到 a2再从 a2 到 a1 算一次往返)。同时,Bob 希望在岛屿 b1和 b2之间往返 bn次。这个过程中,所有危桥最多通行两次,其余的桥可以无限次通行。请问 Alice 和 Bob 能完成原创 2021-09-20 11:33:31 · 118 阅读 · 0 评论 -
YBTOJ:卖猪问题(网络流)
文章目录题目描述数据范围解析代码题目描述尼克在一家养猪场工作,这家养猪场共有MMM间锁起来的猪舍,由于猪舍的钥匙都给了客户,所以尼克没有办法打开这些猪舍。有NNN个客户从早上开始一个接一个来购买生猪,他们到达后首先用手中的钥匙打开他所能打开的全部猪舍,然后从中选取他要买的猪,尼克可以在此期间将打开的猪舍中的猪调整到其它开着的猪舍中,每个猪舍能存放的猪的数量是没有任何限制的。买完猪后客户会将他打开的猪舍关上。好在尼克事先知道每位客户手中有哪些钥匙,要买多少猪,以及客户到来的先后次序。请你写一个程序,帮助原创 2021-09-19 21:44:43 · 473 阅读 · 0 评论 -
网络流优化:-1优化与当前弧优化
所谓网络流优化,就是对网络流算法进行优化(逃)-1优化大概就是如果在一次bfs搜出的图中发现当前这个点啥都增广不出来,就暂时把这个点扣掉当前弧优化在一次bfs搜出的图中,如果某条边已经搜过,就不必再重复搜了注意!使用当前弧优化时,必须写成:int dfs(int x,int lim){ if(x==n||!lim) return lim; int res=0; for(int &i=cur[x];~i;i=p[i].nxt){ int to=p[i].to; if(.原创 2021-09-19 20:05:57 · 447 阅读 · 0 评论 -
YBTOJ:幻灯片(二分图匹配)
文章目录题目描述数据范围解析解析题目描述有一堆透明的幻灯片堆叠在一起,每个幻灯片上的随机一个位置会有幻灯片的标号。因为幻灯片是透明的,所以堆叠在一起的幻灯片使得这些标号分不清各自对应的幻灯片。现在要求你求出那些能够确定对应关系的幻灯片以及对应的标号。数据范围n<=26n<=26n<=26解析面对这样的数据范围,我还是不够暴力…关键的思路就是暴力枚举每一条边,判断删掉这条边之后是否仍是完美匹配解析#include<bits/stdc++.h>using原创 2021-09-17 20:53:14 · 206 阅读 · 0 评论 -
YBTOJ:消除格子(二分图匹配)
文章目录题目描述解析代码题目描述在一个n*n的矩阵中,有 k个格子中有杂物,现在你有一种能力,一次可以消除一行或一列格子中的杂物,问你至少需要几次可以将这些杂物全部消完。解析看起来像是网络流,结果竟然是二分图。。。本题关键是模型的转化,思路有了后就变成板子了考虑做法:对于每一个点(x,y)(x,y)(x,y),都连一条从x到y的边,最后求最大匹配就是答案为什么是这样?首先,这样连边之后,每个点对应一条边,因此每条边至少要有一个点被选到,因此相当与求这个图的最小点覆盖然后就是两个很妙的原创 2021-09-17 16:11:53 · 309 阅读 · 0 评论 -
模板:线段树优化建图
前言百川到海,天下归一解析线段树优化建图是用于对一个区间的点连边时的优化方法建一棵in树一棵出树分别往上和下指即可大概长这样(pia的洛谷的照片)建树正常动态开点即可void build(int &k,int l,int r){ tr[k=++tot]=(tree){0,0}; if(l==r){ addline(k,l); return; } build(tr[k].ls,l,mid);build(tr[k].rs,mid+1,r); addline(k,原创 2021-09-09 13:52:57 · 202 阅读 · 0 评论 -
模板:最大匹配
文章目录前言代码前言匈牙利算法可以解决的问题:(原谅我的偷懒)(原谅我的水文)代码#include<bits/stdc++.h>using namespace std;#define ll long longconst int N=3e5+100;const int mod=1e9+7;int n,m,e;struct node{ int to,nxt;}p[N<<1];int fi[N],cnt=-1;void addline(int x,int原创 2021-08-16 00:57:53 · 119 阅读 · 0 评论 -
模板:欧拉路
文章目录前言代码前言就是欧拉路的板子理解起来有亿点困难(连大神学长都还没有完全理解…)不过背起来还是很好背的请勿模仿代码#include<bits/stdc++.h>using namespace std;#define ll long longconst int N=3e5+100;const int mod=1e9+7;const int p=131;int n,m;vector<int>e[N];int in[N],out[N],s;int zh原创 2021-08-16 00:55:08 · 117 阅读 · 0 评论