![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
ACM-图论
文章平均质量分 93
图论
nefu-ljw
这个作者很懒,什么都没留下…
展开
-
PAT甲级 2021年春季考试 7-4 Recycling of Shared Bicycles 【floyd最短路】
7-1 Arithmetic Progression of Primes (20 分)In mathematics, an arithmetic progression (AP,等差数列) is a sequence of numbers such that the difference between the consecutive terms is constant. In 2004, Terence Tao (陶哲轩) and Ben Green proved that for any positi原创 2021-03-17 12:07:29 · 514 阅读 · 0 评论 -
2020ICPC·小米 网络选拔赛第一场 D题 Router Mesh【Tarjan求割点和子树】
传送门:Router Mesh题意给你一个无向图,你需要求出每次删除iii点(i=1,2,…,n)后,有多少个连通分量。思路每次dfsdfsdfs能搜出一个连通分量,并求出每个点uuu在深度优先搜索生成树中往下有child[u]child[u]child[u]个子树分支。在dfsdfsdfs过程中,只有当!dfn[u]&&low[v]>=dfn[u]才有child[u]++(详见代码),因为这样child[u]child[u]child[u]统计的才是uuu点子树的数量。如原创 2020-10-25 22:01:10 · 1046 阅读 · 5 评论 -
Codeforces Round #675 (Div. 2) D. Returning Home【思维建图,最短路】
传送门:D. Returning Home题意在二维平面上,给你起点和终点的坐标,你从起点出发,每秒可以上下左右选个方向移动一格。平面上还有m个传送门,当前位置的 x或y 与任意一个传送门的 x或y 相同,就可以不花费时间立即到达该传送门。求起点到终点的最短时间。思路首先,对于走传送门,那么只移动了x或y;对于走终点,必须移动x和y。原创 2020-10-07 00:08:29 · 267 阅读 · 1 评论 -
2020牛客暑期多校训练营(第八场)I题 Interesting Computer Game【并查集,找环】
传送门:Interesting Computer Game题意给你n对数,在每对数当中只能选一个(或者不选),问最多能取多少个不同的数。思路用图论的思想建模。这相当于是一个有重边的无向图。对于每个连通分量,如果其中存在环(重边也算环),那么就可以取出这个连通分量内的所有点;如果不存在环,那么可以把这个连通分量想象成是一条链,最后的点取不到,最多只能取出连通分量点数减1。由于是无向图,要判断在连线的过程中是否出现了环,可以用并查集维护。AC代码#include <bits/stdc++.原创 2020-10-03 10:25:15 · 262 阅读 · 0 评论 -
Codeforces Round #400 (Div.1+Div.2) D. The Door Problem【2-SAT】
传送门:CF776 D / NEFU 2041题意有n个门,有些是开的,有些是关的,有m个开关控制这些门,一个开关可以控制多个门,但是每个门都被恰好2个开关控制。开关的具体作用是,将所有被控制门的状态取反。是否可以通过开关实现所有门都打开?思路本题关键在于“每个门都被恰好2个开关控制”。那么一个门就是一个限制条件,根据门的初始状态,得到这两个开关到底是选还是不选。如果门初始是开,那么两个开关都选或者都不选;如果门初始是关,那么两个开关中只能选一个。于是题目就转换为:总共n个限制条件,讨论m个点的原创 2020-10-02 14:46:59 · 263 阅读 · 0 评论 -
【ACM图论模板】2-SAT问题
前置知识:Tarjan算法 (详见此文)参考文章:1. 博客园 2-SAT 知识小结2. 洛谷 2-SAT学习笔记总结:我们将一个元素拆成两个点表示bool元素的两种情况,有向边表示若起点成立,则终点一定成立。当拆点建图后,如果一个元素拆出的两个点u,v。存在有向图上的路径u->v,则代表点u可以推出点v,点u非法,则点v合法。有向无环图的情况下,合法点的拓扑序比非法点大。Tarjan后,同一元素拆成的两个点中强连通分量编号小的点是合法点。如果一个元素拆成的两原创 2020-10-01 17:37:48 · 325 阅读 · 0 评论 -
洛谷 P4047 部落划分【最小生成树】
洛谷 P4047 部落划分先处理出所有可以连的边,n个点理论上最多可以连n*(n-1)/2条边,现在要划分为k个部落(k个连通分支),找规律,可以得到需要连的边的数量为n-k。为了使靠得最近的两个部落尽可能远离,先连权值小的边,连到n-k条边时就已经完成了划分,如果再连一条边即第n-k+1条边,就是靠得最近的两个部落的最大距离。通过以上分析不难得出,本题本质就是最小生成树的模板题,并不难。(可能因为“靠得最近的两个部落尽可能远离”这句话说得比较绕…)#include <bits/stdc++.原创 2020-09-26 14:16:30 · 230 阅读 · 0 评论 -
【ACM图论模板】强连通分量,缩点(Tarjan或Kosaraju)
先科普一下简写,DAG指的是有向连通图,SCC指的是强连通分量。例题:洛谷 P3387 【模板】缩点思路就是用Tarjan算法或者Kosaraju算法求强连通分量,然后把每个强连通分量变成一个点,重新建图,图就变成了DAG,用拓扑排序进行dp即可。原创 2020-09-24 20:10:11 · 388 阅读 · 0 评论 -
HDU 1269 迷宫城堡【有向图的强连通分量,Kosaraju算法】
HDU 1269 迷宫城堡Kosaraju算法求有向图强连通分量,时间复杂度O(V+E)O(V+E)。两次dfs,第一次按原图dfs,用个vector数组存储dfs序,越晚搜到的点dfs序越大。第二次按反图(所有边反向)dfs,先搜索第一次dfs序大的,然后把每个点记录其强连通分量的编号。本题要求有向图中任意两个点都连通,即整个图中强连通分量个数为1。原创 2020-09-22 21:49:01 · 207 阅读 · 0 评论 -
【ACM图论模板】最大流+费用流(dinic算法)
友情链接:【图论】网络流问题——最大流入门(Dinic算法)【图论】最小费用最大流(网络流进阶)一、最大流:dinic算法最终优化模板测试OJ:LOJ #101. 最大流 27~30 ms洛谷 P3376 【模板】网络最大流 65~100 ms建议点数和边数可以开大一点,开到1e5,防止建图的时候没算好边和点数而导致TLE。#include <bits/stdc++.h>using namespace std;typedef long long ll;原创 2020-09-22 20:33:26 · 656 阅读 · 1 评论 -
2020牛客暑期多校训练营(第一场) H题 Minimum-cost Flow【图论/最小费用最大流】
题目链接:https://ac.nowcoder.com/acm/contest/5666/H题意给你一个n个点,m条边的有向图,并给出每条边的费用。然后进行q次询问,每次询问给出每条边的容量(分数表示),并且所有边的容量相等。 对于每次询问,你需要输出总流量为1时,从点1到点n的最小费用(分数表示)。思路这题难的地方在于多次询问,q达到了1e5,那么如果对于每次询问都建图跑费用流肯定是会超时的。那么不妨在询问前跑一次费用流,得到一些有用的信息,以便之后的每次查询能尽量做到O(1)的复杂度(实际原创 2020-07-13 12:10:09 · 907 阅读 · 0 评论 -
HDU 2157 How many ways?? 【矩阵快速幂水题,离散数学结论】
HDU 2157 How many ways??离散数学中证明过这样一个结论:书上写了一大堆,说人话 就是从u点到v点恰好经过k步的方案数,为邻接矩阵的k次幂得到的矩阵(假设是ans)中的元素ans[u][v]。出题人比较友好,幂次比较小(k<20),不用矩阵快速幂也能过,但还是写一下矩阵快速幂的代码:#include <bits/stdc++.h>using namespace std;const int N=22,mod=1000;int n,m,x,y,k,q;st原创 2020-05-22 21:11:05 · 1196 阅读 · 4 评论 -
【图论】差分约束系统
本文主要是记录差分约束练习题的思路和代码,在此不再详细解释算法原理。差分约束原理,参考文章:https://blog.csdn.net/dragon60066/article/details/80245797POJ 1875 Cashier Employment思路: 设 num[i] 为来应聘的在第i个小时开始工作的人数, r[i] 为第i个小时至少需要的人数, x[i] 为招到的在第i个小时开始工作的人数, x[i] 的前缀和为 s[i] ;原创 2020-05-09 00:15:04 · 390 阅读 · 0 评论 -
【图论】欧拉回路
概念HDU 1878 欧拉回路题意:判断无向图是否有欧拉回路。HDU 1116 Play on Words题意:判断有向图是否有欧拉回路或欧拉通路。思路:并查集判连通块个数为1即为连通图,统计出度入度判欧拉回路/通路,unordered_set去重出现的点。原创 2020-04-23 11:06:02 · 727 阅读 · 0 评论 -
“科大讯飞杯”第18届上海大学程序设计联赛 L题 动物森友会【最大流+二分,详细思路】
题目链接:https://ac.nowcoder.com/acm/contest/5278/L思路这题是要求最小天数,我们不妨先转换一下思路:如果在天数固定并且已知的情况下,能不能保证所有物品都能得到?这个问题显然可以用最大流来解决。建图,满足以下三点:周一到周日抽象成7个点,(自己构造出来的)源点依次与它们相连,容量为经过这天的次数把每天与这天可以获得的所有物品相连,容量无限把所有物...原创 2020-04-18 22:18:22 · 565 阅读 · 0 评论 -
【图论】最小费用最大流(网络流进阶)
本文 前置基础:最大流问题(Dinic算法) && 单源最短路径(SPFA算法)洛谷 P3381 【模板】最小费用最大流所谓最小费用最大流,其实就是在最大流问题的基础上,再给边加上一个属性:单位流量的费用。边的容量为cap,单位流量的费用为cost,需要求出在最大流的前提下,最小的总费用。(总流量最大并且总费用最小)每条增广路上的费用 = 这条路上的最小流量 * 所有边的单位流量费用之和。从原先Dinic算法的模板来看(最大流Dinic模板),有BFS来求分层图,并DFS进行增广。现在我们需要原创 2020-04-10 19:41:04 · 2711 阅读 · 3 评论 -
【图论】网络流问题——最大流入门(Dinic算法)
参考文章:1. 博客园:Dinic算法(研究总结,网络流)2. 洛谷博客:网络最大流-从入门开始,详细讲到实用易懂的Dinic算法前置知识:DFS、BFS、建图(链式前向星)本文主要是用 Dinic算法 解决最大流问题。洛谷 P3376 【模板】网络最大流最大流问题,Dinic算法,最坏时间复杂度为O(V2*E),然而一般情况下是达不到这么大的,要不这题早超时了。算法流程1、根据残量网络计算层次图。2、在层次图中使用DFS进行增广直到不存在增广路。3、重复以上步骤直到无法增广。原创 2020-04-04 14:21:21 · 1198 阅读 · 0 评论 -
求单源最短路径【Dijkstra算法&&SPFA算法】(2019.6.13训练)
前言Dijkstra算法,是正权图中求单源最短路径的经典算法,其朴素算法时间复杂度为O(n2),加入优先队列优化(堆优化)后时间复杂度可以达到O((m+n)logn)。注意Dijkstra算法不适用于负权图, 也就是说给出的边权不能有负值。正权图最好用Dijkstra算法,相较于SPFA算法比较稳定。(以上来自于洛谷大佬的总结)为了更好地看懂Dijkstra算法(优化)的模板,需要用到链式前向...原创 2019-07-02 20:27:05 · 388 阅读 · 4 评论 -
最小生成树复习(2019.5.31训练)
之前已经学过并查集和最小生成树了(点击此处为上次训练题),今天在洛谷上面复习一下。洛谷 P1536 村村通#include <bits/stdc++.h>using namespace std;const int N=1010,M=2e5+10;int n,m,cnt,ans,pre[N];struct node{ int x,y;}p[M<<1];...原创 2019-05-31 20:54:50 · 302 阅读 · 0 评论 -
【图论】拓扑排序
参考:洛谷日报 快速入手拓扑排序HDU 1285 确定比赛名次拓扑排序模板题,唯一不同的是要求编号小的在前,把队列改成优先队列就行了。#include <bits/stdc++.h>using namespace std;const int N=1010;int n,m;int dp[N];int d[N];vector<int>g[N];vector<int>ans;void topo() // 拓扑排序{ priority_queue<int,vector<int>,原创 2019-10-24 20:53:55 · 334 阅读 · 0 评论