
图论
文章平均质量分 51
yezzz.
这个作者很懒,什么都没留下…
展开
-
SPFA判负环板题
SPFA判负环原创 2022-07-24 15:14:29 · 321 阅读 · 0 评论 -
E - AND-MEX Walk (并查集理解)
E - AND-MEX Walk分析:结论+并查集的连通性求解首先易证答案就3种:0,1,2故分类讨论(分别对30位求解连通性):0:存在某一位使得u,v连通1:存在某一位的连通块的 边的集合 存在偶数边,这样就能先到 偶数边 再到v 这样保证 ans=12:其余情况#include <bits/stdc++.h>#define int long long #define Pa pair<int,int> using namespace std;原创 2022-04-26 16:41:08 · 369 阅读 · 0 评论 -
E - Equal Tree Sums(树上问题)
E - Equal Tree Sums分析:神仙思维+树上问题+结论如果没有ai!=0a_i!=0ai!=0的条件,直接全取0就是现在有这个条件,想办法往这个条件构造考虑树上的任意一条边的两个端点,往0靠,则正负取,即黑白染色每个点的权值取其度数这样就能保证这一整颗树(无根树)的权值为0,任意去掉一个“根节点”若根为正:则剩下的子树的权值和都是为-1若根伟负:则剩下的子树的权值和都是为1#include <bits/stdc++.h>#define int原创 2022-03-27 16:45:51 · 199 阅读 · 0 评论 -
CF772 E - Cars(二分图染色,拓扑排序)
E - Cars分析:二分图染色,拓扑排序分两类情况:相遇:只能相向而行(xr<xlx_r<x_lxr<xl)相离:只能背向而行(xr>xlx_r>x_lxr>xl)因此,不管是什么情况,相邻两点方向不同,先跑一遍二分图染色,不成立,则 “NO”染完色之后,令 1向R走,0向L走,建有向图相遇:xr<xlx_r<x_lxr<xl ,建 1 到 0 的边相离:xr>xlx_r>x_lxr>xl原创 2022-02-25 16:46:21 · 601 阅读 · 0 评论 -
Codeforces Round #756 (Div. 3)
Codeforces Round #756 (Div. 3)A. Make Even分析:就 0,1,2,−10,1,2,-10,1,2,−1 四种情况#include<bits/stdc++.h>#define int long longusing namespace std;const int N=1e6+5;char s[N];signed main(){ int T; cin>>T; while(T--) {原创 2021-11-26 16:43:44 · 533 阅读 · 1 评论 -
2021 ICPC 辽宁省 B. 阿强的路 (多源点路径,多条件下状态转移,Floyd魔改)
B. 阿强的路题意:“所有这两点间的路径中能得到的最小的路径最大点权乘以路径最大边权”就这句话,断句很重要!!!如果跟我一样断在“最小的路径”后面(小学语文水平),那就完全错了,就一直想着在最短路上跑,泡了个寂寞要断在“最小的”后面,就是对于任意两点的所有路径,找到一条路径,这条路径上的最大点权乘最大边权是所有路径最小的那条分析:多源点路径 DPDPDP多源点路径上的问题,可以想到在 FloydFloydFloyd 上跑为什么要排序?同时维护两个东西:最大边权和最原创 2021-10-29 16:44:36 · 306 阅读 · 2 评论 -
Free Figurines (容斥,思维,链上操作)
Free Figurines分析:这题是个套娃可以转成一个含有多条链的有向图从新图到旧图,让我们求最少的操作次数考虑不用改变的地方:对于每一条链,从旧链转换到新链,首先它们的起点肯定还要一样(因为这是个套娃,最下面的才可以不用变,上面的要一个一个的拿出来)然后就可以从起点往后找,直到两个链的元素不相同思路转换:若直接考虑去一个一个的加操作数,会很复杂,考虑用容斥最劣的方法就是先将旧图的所有边断开,再将新图的所有边连上再减去所有共有的边,就是 ansansans原创 2021-10-26 22:14:47 · 153 阅读 · 0 评论 -
CF1593 E. Gardener and Tree (树上删叶子,BFS)
E. Gardener and Tree分析:在树上,从外层到里层逐层删叶子跑一遍 BFSBFSBFS 即可#include <bits/stdc++.h>using namespace std;const int N=1e6+5;vector <int> g[N];int du[N],dep[N];int sub;void bfs(int n,int k){ queue <int> q; for(int i=1;i<=n;i++原创 2021-10-22 10:43:19 · 265 阅读 · 0 评论 -
CF1586E Moment of Bloom(并查集重构树,链上结论)
E. Moment of Bloom分析:重构树 +++ 链上结论结论:若考虑在树上,去掉所有奇数边的次数为 sum/2sum/2sum/2(sum为奇数点的个数)对于一棵树来说,选取两个端点,这条链是唯一的每次操作就能去掉两个奇数点,因次 sumsumsum 还要除以二然后用并查集在图上跑一遍生成树,再遍历每一条链即可#include <bits/stdc++.h>using namespace std;const int N=1e6+5;int f[N]原创 2021-10-20 15:03:15 · 347 阅读 · 0 评论 -
hdu 7135 Bigraph Extension(并查集构造环,神仙思维)
hdu 7135 Bigraph Extension分析:构造一个 2n2n2n 的环(就很难想到)两个集合之间连边,且要求从 AAA 集合任意一点到 BBB 集合任意一点(可能会有多条边),要求最长的边 len>nlen>nlen>n考虑将这个二分图展开来看,会是一个连通块,且一条边上的两端点分别属于两个集合要使 len>nlen>nlen>n,那这个连通块必然是由多个环组成的(链上肯定存在 len<=nlen<=nlen<=n原创 2021-10-18 22:45:40 · 166 阅读 · 0 评论 -
P4251 [SCOI2015]小凸玩矩阵 (二分答案,二分图匹配)
P4251 [SCOI2015]小凸玩矩阵分析:二分答案 +++ 二分图匹配每行每列只能选取 111 个,将行列连边,建立二分图要求的是选取的 nnn 个数中第 kkk 大数的数最小值二分这个去求这个值,每次操作:将 a[i][j]<=mida[i][j]<=mida[i][j]<=mid 的连边(建边条件)跑一边二分图最大匹配若 cnt>n−k+1cnt>n-k+1cnt>n−k+1 则说明当前 mid>ansmid>ansm原创 2021-09-25 20:23:50 · 106 阅读 · 0 评论 -
P3355 骑士共存问题 P4304 [TJOI2013]攻击装置 (二分图最大独立集,黑白染色)
P4304 [TJOI2013]攻击装置分析:考虑攻击装置的安放位置(令 s=行数+列数s=行数+列数s=行数+列数 )若当前装置放在 sss 为奇数的位置,那么 888 个方向上的 888 个偶数位置不能放将位置 sss 按奇偶划分为两个集合(即黑白染色),问题便转换成了二分图匹配的问题此题是让求最大独立集#include <bits/stdc++.h>using namespace std;typedef long long ll;const int M=1原创 2021-09-23 13:15:01 · 140 阅读 · 0 评论 -
棋盘覆盖 (黑白染色,二分图最大匹配)
棋盘覆盖分析:这题绝妙!!!令 s=行坐标+列坐标s=行坐标+列坐标s=行坐标+列坐标 ,当一个格子的 sss 为奇数时,那能与当前格子匹配的 444 个格子的 sss 都为偶数(反之亦然)然后就可以跑二分图最大匹配了,sss 为奇数的为一集合,sss 为偶数的是另一集合#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5;vector <原创 2021-09-20 20:35:25 · 370 阅读 · 0 评论 -
P2825 [HEOI2016/TJOI2016]游戏 (二分图最大匹配,预处理)
P2825 [HEOI2016/TJOI2016]游戏分析:和 P1129 [ZJOI2007] 矩阵游戏 这题差不多,也是行和列分别看作二分图的两个集合多了一些 预处理若行或列被硬石头隔开了,那再分别加行或列即可吐槽一下下:wsfwwsfwwsfw , "yr[j]=++toy""yr[j]=++toy""yr[j]=++toy" 我直接复制上一行,把 jjj 变成 iii 了,调错调了 111 小时…还对着题解写了另一种预处理的解法(见下文)#include <bits/原创 2021-09-20 19:37:26 · 634 阅读 · 0 评论 -
P3033 [USACO11NOV]Cow Steeplechase G(二分图最大独立集,结论,逆向思维)
P3033 [USACO11NOV]Cow Steeplechase G分析:将横的线段看作一个集合,竖的线段看作另一集合,且集合内部没有关联容易想到是用二分图最大匹配来解决常规的二分图最大匹配就是求最大匹配的对数,但这题是反过来的要求两个集合不匹配的线段的个数(即求最大独立集)结论:最大独立集 === 总点数 −-− 最大匹配数(两线段相交即匹配)现在思考这个结论的正确性若两线段相交,则要去掉一条线段现已知最多有 mmm 对线段相交,为什么去掉 mmm 条线段就够了(不知道原创 2021-09-18 16:34:40 · 213 阅读 · 0 评论 -
二分图刷题记录
二分图刷题记录P2055 [ZJOI2009]假期的宿舍分析:阅读理解题就是问除了回去的人,剩下的人能不能完全匹配床位一个坑点:非本校的人没有床位!!!(查了好久,我是瞎子…)#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5;vector <int> g[N];int a[N], b[N], vis[N], pre[N];bool原创 2021-09-17 22:59:08 · 84 阅读 · 0 评论 -
P1129 [ZJOI2007] 矩阵游戏 (二分图完全匹配,思维)
P1129 [ZJOI2007] 矩阵游戏分析:这题是个思维题,有以下几个结论不管是行交换还是列交换,原本在同一行的还是同一行(列同理),即不会破坏同一行(列)的平衡性要使达到最后的结果,则每一行都对应着一个,每一列也都对应着一个将行列分开来看(两个集合),便是二分图了,而且要是二分图完全匹配输出 “Yes”#include <bits/stdc++.h>using namespace std;const int N = 1005;vector <int> e原创 2021-09-17 17:29:58 · 237 阅读 · 0 评论 -
P1525 [NOIP2010 提高组] 关押罪犯 (二分图判定,种类并查集)
P1525 [NOIP2010 提高组] 关押罪犯分析:二分图判定(染色法)+++ 二分答案二分答案,判断答案是否满足全部的罪犯关到两个监狱里,即二分图判定#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e6+5;struct Node { int next,to,w;}e[N];int head[N], tot;inline void add(int原创 2021-09-17 16:24:51 · 269 阅读 · 0 评论 -
二分图最大匹配(模板)
二分图最大匹配入门(板子题)balabalabalabalabalabala 的见大佬博客 图论-二分图专题_HeartFireY的博客-优快云博客P3386 【模板】二分图最大匹配#include <bits/stdc++.h>using namespace std;const int N = 1005;vector<int> e[N];int n, m, t;int pre[N], vis[N];bool dfs(int u){ for(auto原创 2021-09-16 21:15:09 · 239 阅读 · 0 评论