![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
Strezia
这里介绍不了我
展开
-
杭电多校6 1010. Planar graph
杭电多校6 1010原创 2022-08-05 14:52:11 · 88 阅读 · 0 评论 -
#800 Div.2 E. Keshi in Search of AmShZ 最短路
1697D最短路 2300给你一个有向图,目标是从1走到 nnn ,每次操作可以选择以下两种之一:记任意时刻所处的位置都是已知的,问最少多少次操作能保证到达终点。反向建图,并记录每个点的入度,从终点 nnn 开始跑 dijkstra,每条边的边权为入度中还未走过的点数加一。...原创 2022-06-17 14:16:22 · 259 阅读 · 0 评论 -
Codeforces Round #800 (Div. 2) D. Fake Plastic Trees
Codeforces Round #800 (Div. 2)原创 2022-06-17 01:21:50 · 349 阅读 · 0 评论 -
CF888G Xor-MST 01字典树&dfs*
linkdfs,mst,01trie,2300题解写的很清楚,也是看了题解才会做。。const int maxn = 2e5 + 10;int n;int a[maxn];int nxt[maxn*30][2], cnt = 1;void insert(int x) { int cur = 1; for(int i = 30; i >= 0; i--) { if(!nxt[cur][(x>>i)&1]) nxt[cur][(x>>i)&1]原创 2022-03-01 17:51:37 · 77 阅读 · 0 评论 -
CF1627E. Not Escaping *
Linkdp,离散化, 2200题意有一栋 nnn 层高楼,每层有 mmm 个房间,现在需要从(1,1)→(n,m)(1,1) \rightarrow (n, m)(1,1)→(n,m),同层间向左or右移动需要消耗 xix_ixi 点体力(每层对应一个 xix_ixi ),除此之外有 kkk 个梯子,可以从(i,j)→(p,q)(i, j)\rightarrow (p, q)(i,j)→(p,q) 并恢复 kik_iki 点体力,保证i<pi < pi<p,问到达终点所需的最原创 2022-02-20 12:55:23 · 234 阅读 · 0 评论 -
CF1369E. DeadLee 思维
Link思维,贪心,拓扑排序 2400题意有nnn种菜,每种菜都有wiw_iwi碟,你有mmm个朋友,每个朋友都有两种喜欢的菜,你按照某个排序让朋友一个一个来吃菜,如果现在桌上有这个朋友喜欢的菜,他就会每种都吃一碟,但是如果两种菜都没了,你就会死。问你最后你会不会死,如果不会输出这个排序。思路显然,如果第 iii 种菜的需求不大于 wiw_iwi,那么吃这种菜的人一定能吃到,我们贪心地把这些人往后排。同时对于这些人,它们已经吃了一种菜iii了,那么对于他们喜欢的另一种菜jjj,需求就会少1。发原创 2022-02-18 17:28:29 · 84 阅读 · 0 评论 -
CF1632E1. Distance Tree (easy version)
Link2400题意给你一棵树,每条边权为1,f(x)表示点x到1的路径上权重和。你可以增加一条边权为k的边连接,使得f(x)最大值最小。问你k在[1,n]时最大f(x)最小是多少。 n≤3000n \leq 3000n≤3000思路O(n2logn)O(n^2\log n)O(n2logn),先找到深度最深的点x,容易得到增加的一条边一定是从1到x的某个祖先。对 k∈[1,n]k \in [1,n]k∈[1,n], 二分答案ans,找到使得x距离1为ans的点y,连接x,y,边权为k,然原创 2022-02-17 06:03:12 · 178 阅读 · 2 评论 -
P4151 [WC2011]最大XOR和路径线性基
link注意insert的是 res ^ val[v] ^ wvector <ull> B;void insert(ull x) { for(auto b : B) x = min(x, x ^ b); for(auto &b : B) b = min(b, x ^ b); if(x) B.push_back(x);}int head[maxn], cnt;struct Edge { int to原创 2022-02-12 12:59:35 · 123 阅读 · 0 评论 -
P1600 [NOIP2016 提高组] 天天爱跑步 树上差分*
Link一道我觉得非常好的题目,有些地方还没想清楚,需要再回顾一下。const int maxn = 3e5 + 10;const int maxm = 6e5 + 10;const int P = 1e9 + 7; //998244353const int INF = 0x3f3f3f3f;const double eps=1e-7;int n, m;int Log2[maxn], fa[maxn][30], dep[maxn];bool vis[maxn];int head[m原创 2022-02-11 00:57:40 · 313 阅读 · 0 评论 -
P4556 [Vani有约会]雨天的尾巴 线段树合并做法*
Link线段树合并的板子题,等刷过几道再去补树剖做法。注意: 线段树空间开很多倍的同时,不要忘记把root数组也同样开到很多倍思路其实就是树上差分+LCA,但时空复杂度 O(NM)O(NM)O(NM),通过树上倍增将时间复杂度优化到 O((N+M)log(N+M))O((N+M)\log(N+M))O((N+M)log(N+M)),再通过线段树合并将空间复杂度同样降到这一级别。具体来说,对树上每个点建立一棵动态开点的权值线段树,支持修改某个位置,维护区间最大值和最大值所在的位置。代码stru原创 2022-02-07 03:03:12 · 249 阅读 · 0 评论 -
acwing352.闇の連鎖 树上差分
Link思路问题转化蛮巧妙的。主要边恰好构成一棵树,考虑只添加一条附加边<x,y>,则恰好构成一个环,如果第一步选择切断x,y之间路径的某条主要边,则第二步必须切断<x,y>,才能分成不连通的两部分。所以相当于每条附加边<x,y>都把x,y路径上的主要边覆盖了一次,1.若第一步把被覆盖了0次的主要边切断,则第二步可以切断任意一条附加边2.若第一步把覆盖了1次的主要边切断,则第二步仅有一种切法。3.若第一步切断的边被覆盖次数大于1,则显然第二步无解。因此转化成原创 2022-02-04 16:57:25 · 247 阅读 · 0 评论 -
P1099 [NOIP2007 提高组] 树网的核——树的直径
Link方法蛮多的一道题,主要是在书上看的,这里不想写了,贴个代码保存一下。代码////#include <bits/stdc++.h>using namespace std;//#define mp make_pair#define pii pair<int,int>#define pb push_back#define ll long long#define LL long long#define ld long double#define endl '原创 2022-02-04 14:13:57 · 366 阅读 · 4 评论 -
P3629巡逻 树的直径*
Link挺有意思的一道题,思路其实蛮清晰也比较容易理解,然而实现的时候写了半天代码const int maxn = 1e6 + 10;const int maxm = 1e6 + 10;struct Edge { int to, dis, next;}edge[maxm];int n, m;int head[maxn], dis[maxn], cnt = 1;bool vis[maxn];void add_edge(int u, int v, int w) { cnt++原创 2022-02-04 13:37:32 · 335 阅读 · 0 评论 -
acwing349 黑暗城堡 ——最短路径生成树
Link思路最短路径生成树计数代码////#include <bits/stdc++.h>using namespace std;//#define mp make_pair#define pii pair<int,int>#define pb push_back#define ll long long#define LL long long#define ld long double#define endl '\n'#define RE0 return原创 2022-02-03 16:40:17 · 277 阅读 · 0 评论 -
acwing346走廊泼水节—— MST *
Link思路感觉方法很妙的一道题,用类似kruskal的方法,每次合并两个联通块x, y时,假设这条边长度为 www,若要构成完全图,则我们需要额外添加Sx∗Sy−1S_x*S_y-1Sx∗Sy−1条边,其中SiS_iSi表示第 iii 个连通块中的点数量,由于要保证 www 仍为MST中边,所以我们新加的这些边长度最小为w+1。对于每次合并都累加(w+1)(SxSy−1)(w+1)(S_xS_y-1)(w+1)(SxSy−1) ,即可得到最终答案。容易证明这样恰好构成了完全图,无重边也无缺原创 2022-02-03 15:59:43 · 244 阅读 · 0 评论 -
P2371 [国家集训队]墨墨的等式 ——同余最短路
P2371思路同余最短路,自我感觉做这类题要注意两点。1.虽然n的范围很小,但实际建图的点的数量和边的数量都要开到n∗ain * a_in∗ai即12*5e5。2.和上篇文章的题目初始dis[1] = 1不同,这道题目初始值即为dis[0] = 0,表示a mod a_i = 0 中a的最小值可以取到0。代码////#include <bits/stdc++.h>using namespace std;//#define mp make_pair#define pii原创 2022-02-02 19:55:57 · 298 阅读 · 0 评论 -
P3403 跳楼机 同余最短路
P3403思路同余最短路代码////#include <bits/stdc++.h>using namespace std;//#define mp make_pair#define pii pair<int,int>#define pb push_back#define ll long long#define LL long long#define ld long double#define endl '\n'#define RE0 return 0原创 2022-02-02 19:14:45 · 264 阅读 · 0 评论 -
牛客寒假基础补题 —— 第二场
linkG.小沙的身法由于给出的是一个树,所以两点间简单路径唯一。考虑极端情况,给出的n个点构成一条链,可以用前缀和求解,所以容易想到用lca通过类似方法计算。const int maxn = 1e6 + 10;int n, m;int vis2[maxn];int a[maxn];int Log2[maxn], fa[maxn][30], dep[maxn];int head[maxn];bool vis[maxn];long long zheng[maxn], fan[maxn];原创 2022-01-26 19:10:03 · 255 阅读 · 0 评论 -
P1967 [NOIP2013 提高组] 货车运输 —— LCA模板题 + 最大生成树
P1967 [NOIP2013 提高组] 货车运输思路显然只有2*(n-1)条边可能被用到,所以先求最大生成树,然后由于两点间的路径是唯一的,所以进行LCA,并用 w[i][j]w[i][j]w[i][j] 记录从第i个节点到它的 2j2^j2j 祖先间的路径中最短的那条。看起来简单但代码细节还蛮多的,注意更新w数组要在跳跃之前,以及最后不能直接返回min(w[a][0],ans)min(w[a][0],ans)min(w[a][0],ans),还要考虑w[b][0]w[b][0]w[b][0]。/原创 2022-01-22 17:58:57 · 513 阅读 · 2 评论 -
CF1188A1 1600 ——图论+思维 和1586类似
15861188题意:给一颗n个节点边权都为0的树,现在有一种操作可以任意选择这颗树上的两个叶子节点(度数为1的节点)使得这两个节点简单路径(没有重复节点的路径)上的边权加上一个任意实数,问给定节点的连接关系形成一颗树,能否有限次使用上述操作使得树上的边权可以为任意实数(可能每一条边都不一样)思路:若存在点入度恰好为2,则这两条边值肯定是相同的,所以no否则yes// Decline is inevitable,// Romance will last forever./原创 2021-10-18 19:31:15 · 66 阅读 · 0 评论 -
CF1586E. Moment of Bloom ——图论 + 思维* 图中查找两点路径 lca
CF1586E题意:给你一个n个节点m条边的无向图,保证没有重边和自环,给出m个询问,每个询问给出两个点a, b若存在一种方案使得所有询问后每个点的度都是偶数,则输出yes,并输出每次询问的方案否则输出no,并输出最少需要再进行多少次询问,使得所有点的入度都是偶数思路:显然一个点的度都是偶数当且仅当它在询问中出现了偶数次所以很容易判断yes or no所以只要找到每次询问的a到b的任意一条路径就可以了// Decline is inevitable,// Romanc原创 2021-10-18 15:38:18 · 246 阅读 · 2 评论 -
CF1572A. Book 1800 ——拓扑排序+dag上最长路*
A. Book题意:给出n本书,对于每本书给出ki个数,你能理解第i本书当且仅当你全部读过这ki本书,问读多少轮可以理解全部的书,1轮指1-n都读一遍。若无法理解 则输出-1。思路:不难想到拓扑排序,先把入度为0的所有点加入队列,扫描从队列中的点u出发的边指向的点v,dp[v] = max(dp[v], dp[u] + (u > v)),注意每次遍历都减少v点的入度,若入度为0则加入。// Decline is inevitable, romance will last fo原创 2021-09-26 10:56:46 · 203 阅读 · 0 评论 -
Acwing175 电路维修 —— 双端队列bfs
电路维修模型:如果在一张图上(有向图和无向图),边权只可能是1或0,现在我们想从某个节点(假设为s)到另一个节点(假设为t),怎样才能使得路径上的权值和最大?思路:经典双端队列bfs,若边为0则从队首加入,边为1则队尾加入时间复杂度O(n).tip.该题存图时需注意// Decline is inevitable, romance will last forever.// Acwing175 电路维修//https://www.luogu.com.cn/problem/P1原创 2021-09-25 10:56:49 · 99 阅读 · 0 评论 -
POJ4857 逃生 —— 拓扑排序 特殊排序方式
POJ4857 逃生// Decline is inevitable, romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <stack>#include原创 2021-09-23 01:07:08 · 104 阅读 · 0 评论 -
ZCMU-2153 排队问题 ——拓扑排序
ZCMU-2153思路 :由于输入的数据不一定是1-n,所以挺烦的// Decline is inevitable, romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#inclu原创 2021-09-22 20:50:43 · 187 阅读 · 0 评论 -
HDU3470 0 or 1 ——思维 + 最短路* 求某点最小环
0 or 1(判断是否有1点或n点出发的环)其他点的出入度相等,说明一定有一条1到n的路或者1自环和n自环最终答案为1到n的最短路 or1出发的自环+n出发的自环 中小的一个// Decline is inevitable, romance will last forever.#include <iostream>#include <cstring>#include <algorithm>#include <cmath...原创 2021-09-20 22:11:39 · 111 阅读 · 0 评论 -
HDU3416 Marriage Match IV ——最短路 + 最大流 (待填)
HDU3416 Marriage Match IV原创 2021-09-20 19:35:47 · 63 阅读 · 0 评论 -
POJ4725 —— 最短路建图 + 超级源点 *
POJ4725题意:有n个点,n层(不一定每层只有一个点,可能有的层没有点),第i个点属于第a[i]层,相邻两层之间的点可以互相到达且距离为c,此外还有m条节点与节点之间的无向边,求最短路。思路:每一层建立一个超级源点,这个源点到该层的所有点的距离为0,注意此处是单向边,然后相邻层的超级源点距离为c(无向边),然后再正常添加m条边(无向边)即可,即一共有3种边,该图中有不超过2n个点,分别是n个点和<=n个超级源点。注意题目中n, m <= 1e5, 实际上数组开3e5一直w原创 2021-09-20 19:18:21 · 240 阅读 · 0 评论 -
POJ1062 昂贵的聘礼 ——dijkstra设超级源点
POJ1062Description年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要5000金币就行了。"探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。探险家于是又跑到其他地方,其他人也提出了类似的要求,原创 2021-09-20 11:06:02 · 100 阅读 · 0 评论 -
POJ2253 Frogger ——floyd 存二维坐标方式
POJ2253题没什么特别的,注意这种存二位坐标的方式:先用x y数组存储n个点的坐标,然后通过循环把n个点间每个点的距离存成图。跑floyd即可// Decline is inevitable, romance will last forever.#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#原创 2021-09-20 00:00:28 · 85 阅读 · 0 评论 -
POJ3255 Roadblocks ——次短路
Roadblocks题意:求次短路思路:见注释,用dijkstra同时维护最短路和次短路// Decline is inevitable// Romance will last forever// UVA 10917#include <bits/stdc++.h>#define mst(a, x) memset(a, x, sizeof(a))#define INF 0x3f3f3f3fusing namespace std;const int maxn = 5e3原创 2021-09-15 23:34:29 · 190 阅读 · 0 评论 -
LA4080 战争和物流 ——最短路树(待完成)
蓝书330最短路树 用Dijkstra算法可以求出单源最短路树,方法是在发现时除了更新之外还要设置。这样把p看成是父指针,则所有点形成了一棵树。(连通且有n-1条边, 起点的p为自己,其他每个点u对应一条边)这样,要从起点出发沿最短路走到任意其他点,只需要顺着树上的边走即可。即在dijkstra算法中用pre数组记录每个点的前驱题意:给出一个n个结点m条边的无向图,每条边一个正权。令c等于每对结点的最短路长度之和。要求删除一条边后使得新的c值c‘最大。不连通的亮点的最短路长度视为L...原创 2021-09-10 21:39:39 · 89 阅读 · 0 评论 -
Uva10917 林中漫步 最短路+DAG上dp
蓝书330 DAG上的dp, 注意输出路径条数时的dfs函数 if(i == 终点) return 1 如果dis[u] > dis[v],则dfs(v), 并且d[u] += d[v]// Decline is inevitable// Romance will last forever// UVA 10917#include <bits/stdc++.h>#define mst(a, x) memset(a, x, sizeof(a))#define INF 0x3原创 2021-09-10 00:02:11 · 99 阅读 · 0 评论 -
UVA11374 Airport express
UVA11374 Airport express题目链接https://www.luogu.com.cn/problem/UVA11374题意:无向图中n个点给定起点s和终点e求最短路,不同的是有m条边是普通的,另外k条边中最多只能选1条。需要输出最短路的路径,长度,若用到了k条边中的某一条,则需要输出是在哪个点用到的, 否则输出"Ticket Not Used" 格式具体看题目。思路:先在只有m条边的图中从起点和终点分别两次dijkstra, 求出到其他点的最短路分别为dis1[], di..原创 2021-09-07 23:12:41 · 147 阅读 · 0 评论