图论
图论知识汇总
Honestbutter-
这个作者很懒,什么都没留下…
展开
-
简单图论+二分
F 闯关链接注意要特判起点的时间是否符合要求#include<iostream>#include<queue>#include<algorithm>#include<cstring>using namespace std;typedef pair<int,int> PII;const int N=1100;int dx[]={1,0,-1,0},dy[]={0,1,0,-1};int g[N][N];bool st[N][原创 2022-03-12 14:40:25 · 175 阅读 · 0 评论 -
图论/思维 C. Not Assigning
C. Not Assigninglianjie 题意:给定无向图,要求给边赋值,使得每个边权为质数,长度为2的路径边权和也为质数。思路:首先推理得到只有质数2+其他质数=质数,每个长度为2的路径必须包含一条边权为2的边,所以如果要满足条件,不可能有一个点的度数>2,整个无向图形成了一条链式结构。#include<iostream>#include<vector>#include<map>#include<cstring>usin原创 2022-02-17 20:56:13 · 457 阅读 · 1 评论 -
基环树问题
基环树定义:仅包含一个环的连通图/一棵树多了一条边形成了一个环的图(一棵树多一条边不一定形成一个环)充要条件:图是连通图n=mn=mn=m(点数等于边数)分类:无向基环树(NNN边NNN点的无向图)内向基环树(每个点仅有一条出边)外向基环树(每个点仅有一条入边) ????大佬更优学习资源题目1:链接并查集判断连通图题目2:lianjie思维+基环树背景...原创 2022-02-17 16:44:14 · 298 阅读 · 0 评论 -
二分图-F全体集合
F-全体集合链接一个显然的结论:如果每个人两两之间都存在偶数距离的路径,那么必然存在一种方法使得他们集中(可以先让一个人每次都在其初始节点和某个相邻节点之间“反复横跳”,然后其他节点的人都往这个人初始位置走那条偶数路径,到达之后可以选择跟着这个人“反复横跳“,直到全部点都到达,因为是偶数距离,所以"反复横跳"最后还是会跳回初始的位置)。如果路径中存在奇环,即使某两点之间的路径不是偶数路径,也可以通过走这个奇环,改变路径的奇偶性,使得路径为偶数。所以只要路径存在奇环,一定可以使得所有的点到达同一点。原创 2022-02-09 17:10:39 · 162 阅读 · 0 评论 -
Floyd算法原理
限定了每个点可以用的时间(在TiT_iTi之前这个点是不能使用的),下标越大的点能用的时间越晚即Ti−1<TiT_{i-1}<T_iTi−1<Ti。这就说明在TiT_iTi之前iii点是不能用来更新的。floyd()floyd()floyd()三层forforfor循环最外层的kkk表示从iii走到jjj的路径上,只经过111到kkk的所有路径。所以只有t≥Tkt≥T_kt≥Tk时能够进行更新操作。#include<iostream>#include<.原创 2022-02-09 15:46:03 · 751 阅读 · 0 评论 -
堆优化Dijkstra/hash表存结点编号
https://ac.nowcoder.com/acm/contest/27150/J结点编号数据范围达到了1e181e181e18,通过哈希表MAP<LL,int>mpMAP<LL,int>mpMAP<LL,int>mp优化。用get()get()get()函数进行转化。注意最短路长度达到longlonglong longlonglong级别,所以d[]d[]d[]数组初始化时用forforfor循环初始化为1e131e131e13#include<io原创 2022-02-09 14:25:32 · 202 阅读 · 0 评论 -
完全图/欧拉回路
链接完全图: 完全图是一个简单的无向图,其中每对不同的顶点之间都恰连有一条边相连。完全图最多有n*(n-1)/2条边求最长路径的最小值和最大值:最小值:首先最长路径不能有环,否则会无限长,所以在无环情况下,每个点经过一次,最长路径的最小值是n−1n-1n−1最大值:走遍每一条边——欧拉回路,又因为无向图的欧拉回路最多有(n−1)n/2(n-1)n/2(n−1)n/2条边,而欧拉回路要求无向图的奇数度的点最多有2个,分奇偶点情况讨论奇数点:nnn为奇数,(n−1)(n-1)(n−1)为偶数,所以n原创 2022-02-08 11:45:04 · 2575 阅读 · 0 评论