ACM - 图论
图论算法
行码棋
退役ACMer,落魄过,那么光亮在何时?
展开
-
【树链剖分】模板题
【树链剖分】模板题原创 2022-07-22 14:30:18 · 509 阅读 · 0 评论 -
【树链剖分】2022杭电多校2 1001 Static Query on Tree
下面介绍树链剖分做法(即题解的第二种做法)题目大意一棵内向树,三个集合A,B,C,每个集合里面有一些点,求特定点的个数,满足从A集合和B集合可以到达该特定点,且可以从该特定点到达C集合。可以把从A集合到达根节点路径中都打上A标记,把从B集合到达根节点路径中都打上B标记,那么树中被打上A和B标记的就是A和B集合都可以到达的点。(因为是内向树,所以向根节点方向走)tr[u].cnt[i]tr[u].cnt[i]中的itr[u].cnt。...原创 2022-07-22 23:03:40 · 576 阅读 · 1 评论 -
【PTA】【最短路】天梯地图(30分)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805051153825792给你一张图,每条边有长度和通过时间,让你找最短长度和最短时间。要求:若最短时间的路径有多条,找最短的那条若最短长度的路径有多条,找最少节点的那条若两条路径的路线一样,输出一条即可这道题判断特殊情况有点恶心,确实不是很好做dis[]数组分别记录最短长度的数组和最短时间的数组,两个共用一个f[]记录路径中的节点数目,在求最原创 2022-03-30 10:05:42 · 1261 阅读 · 1 评论 -
【Floyd】灾后重建
1️⃣题目描述题目链接:https://www.luogu.com.cn/problem/P1119这道题良心的是重建的时间是从小到大排序的,而且询问的重建时间也是从小到大排序的,所以我们可以正向的进行操作,不需要进行排序操作。2️⃣简单思路本题主要是Floyd算法本质的一个理解和练习。Floyd算法中的k表示的是中间节点,以此为中间节点可以更新两点之间的最短距离。f[i][j]f[i][j]f[i][j]:代表的是i到j的最短距离每当进行一个询问时,如果有村庄在此询问的时间点之前重原创 2022-02-15 14:16:10 · 385 阅读 · 2 评论 -
P2872 [USACO07DEC]Building Roads S(最小生成树)
原题链接本题是最小生成树的相关题目,初始情况存在几条边,剩下的边需要自己选。思路:首先需要把所有点之间的距离求出来存到边的数组中,然后对边按权值从小到大进行排序,对已经存在的边重新再加入到边的数组中,把存在的边的权值设为0,那么之后首先就会选到权值为0的边,然后就按kruskal的模板代码写就行了。注意:1.精度问题求边之间的距离时,sqrt()里面的参数应该是double型的,如果是int型,就会出现精度问题,需要对求出的数据进行强制转换2.并查集初始化#include<bi原创 2021-05-19 18:17:37 · 310 阅读 · 0 评论 -
最小生成树(kruskal算法)
牛客模板题思路:1.先存储所有的边,包括起点,终点,权值u,v,w2.对所有的边按权值从小到大排序3.最小生成树得到的边数一定是n-1(点的数目减一),按权值从小到大取边,如果选中该边,就把这条边的两个点加入到一个集合(表示有同样的归属关系,就是我们所说的并查集)里面,下次选边时,如果有节点已经在这个集合中,说明会构成回路,不满足最小生成树的性质,就要抛弃这条边。#include<bits/stdc++.h>#define fi first#define se secondu原创 2021-05-17 13:13:13 · 365 阅读 · 2 评论 -
小木乃伊到我家(牛客竞赛)(最短路模板题)
题源注意:1.距离要初始化为inf2.边的存储要弄清存储的方式,以及各自代表的含义;比如说pair存储,first代表边的指向的点,second代表边的权值,而数组的第一维代表边的起点。3.优先队列存储的信息要清楚它的作用:存储距离:目的是对距离进行排序,每次取出距离最小的节点,功能只是对队列的节点进行排序。存储节点:目的是为了取出最短距离的节点时,能够获得节点的编号。所以在优先队列里面,存储距离加了个负号,因为优先队列优先对pair的第一个元素进行降序排序,所以为了取出最小距原创 2021-05-15 21:41:04 · 252 阅读 · 0 评论 -
牛客 B-旅行(最短路)(dijkstra算法)
B-旅行思路:要保证必须经过三个旅游景点一个作为起点,一个作为中转点,一个作为终点所以只要枚举中转点就行了,以该中转点为起点进行dijkstra,只要存在最短距离的点数大于等于三,找其中最大的两个距离相加,就是最短距离的最大路径长度。#include<bits/stdc++.h>using namespace std;#define se second#define fi firsttypedef long long ll;typedef pair<int ,int&原创 2021-05-14 17:03:41 · 548 阅读 · 0 评论 -
floyd算法模板
邻接矩阵#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll inf = 0x3f3f3f3f;const ll N = 1e3+5;int g[N][N];int n,m;void floyd(){ int s = 1;//起点 for(int k=1;k<=n;k++) {//中间节点的循环 for(int i=1;i<=n;i++原创 2021-05-13 23:19:17 · 115 阅读 · 0 评论 -
【SPFA】最短路--模板题
最短路#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N = 2e4+5;const ll M = 2e5+5;const ll inf = 0x3f3f3f3f;int n,m;ll dis[N],vis[N];struct node{ int to,w; node(int a,int b) { to = a,w = b; }}原创 2021-05-12 11:02:52 · 212 阅读 · 0 评论 -
Bellman-Ford算法
1.邻接矩阵存储#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;const int N = 1e3+5;void bellman(){ int s = 1; int d[N]; for(int i=1;i<=n;i++) d[i] = inf; d[s] = 0; for(int k=1;k<=n;原创 2021-05-10 23:21:39 · 86 阅读 · 0 评论 -
【dijkstra算法】【SPFA】小木乃伊到我家--模板题
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N = 305;const ll inf = 0x3f3f3f3f;struct edge{ int from,to,w; edge(int a,int b,int c) { from = a,to = b,w = c; }};vector<edge>e[N];struct原创 2021-05-09 23:27:31 · 148 阅读 · 0 评论