图论
Wa_Automata
这个作者很懒,什么都没留下…
展开
-
2023河南萌新联赛第(六)场:河南理工大学 C - 旅游
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K。小C喜欢旅游,现在他要去DSH旅游,DSH里有nnn个城市和 $n-1$ 条双向道路(每条道路长度为1),每条道路连接两个城市,并且任意两个城市都可以通过这些的道路互相到达。现在小C要使用魔法指定传送到DSH里的一个城市,作为他旅游的出发城市,小C旅游遵从以下原则:原创 2023-08-22 16:23:45 · 614 阅读 · 0 评论 -
2023河南萌新联赛第(四)场:河南大学 F - 小富的idea
卷王小富最近又在内卷,并且学了一门新的技能:书法,但是不幸的是在国庆节的书法大赛上,小富不小心打翻了墨水瓶,导致很多墨滴溅在了他的书法纸上,看着墨水不断扩散,浸透了他的书法纸,小富突然萌生了一个想法:我能不能知道某时刻纸上一共有多少墨块? 我们假设墨滴是同时溅在纸上的,并且它们起始大小都为 000,由于墨滴大小不同,因此它们的扩散速度也不同,姑且假设墨滴都是按圆形扩散,如果两个或以上墨滴在扩散过程中相遇,那么就称它们为一个墨块(单独一个墨滴也是墨块),并且假设墨滴相遇不影响它的扩散,对于任原创 2023-08-09 17:51:00 · 1106 阅读 · 0 评论 -
2023河南萌新联赛第(二)场:河南工业大学 F - 最短距离
# [2023河南萌新联赛第(二)场:河南工业大学 F - 最短距离](https://ac.nowcoder.com/acm/contest/61132/L)>时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld#### 题目描述 给定一棵包含 $n$ 个顶点的树 $T$ ,以及 $m$ 个查询请求。每个查询包含三个参数 $:x、y$ 和 $k$。其中 $x$ 和 $y$ 是树中的两个顶点,$k$原创 2023-07-28 20:18:09 · 219 阅读 · 0 评论 -
2023河南萌新联赛第(一)场:河南农业大学 H - 迷宫探险
在与boss的最终决战之后,小蓝来到了冒险的最后一关,在他面前有一个n*m的迷宫,迷宫中道路用'.'表示,墙壁则由‘#’表示。小蓝初始在[1,1]的位置,他只有到达[n,m]才能开启最终的宝藏。小蓝现在迫不及待的想要开启宝藏,所以他想最短的时间内走出迷宫。现在迷宫内有一种特殊的装置 –“弹射器”。弹射器的格子用’*’表示。当走到有弹射器的一格时,小蓝必须选择一个方向,弹射器会让他沿着这个方向弹射x个距离,不同弹射器的弹射距离可以不同。弹射后的格子如果超过迷宫边界或者是墙壁则不能选择这个方向。原创 2023-07-22 08:08:17 · 91 阅读 · 0 评论 -
2022河南萌新联赛第(七)场:南阳理工学院 J - 最短路
# [2022河南萌新联赛第(七)场:南阳理工学院 J - 最短路](https://ac.nowcoder.com/acm/contest/39585/J)#### 因为有重边,所以我们将所有的边存起来,然后搞一个最小生成树,在生成的过程中记一下他们公共的节点,然后在查询的时候跑一个LCA算法,可以在$O(nlogn)$的总体时间复杂度下的出答案原创 2023-07-10 14:52:47 · 117 阅读 · 0 评论 -
第十四届蓝桥杯大赛软件赛省赛C/C++大学B组 试题 I: 景区导游
第十四届蓝桥杯大赛软件赛省赛C/C++大学B组 试题 I: 景区导游LCA模板题,多求几次LCA而已原创 2023-04-10 12:59:34 · 1043 阅读 · 1 评论 -
Codeforces Round 442 (Div. 2) D. Olya and Energy Drinks
# [Codeforces Round 442 (Div. 2) D. Olya and Energy Drinks](https://codeforces.com/contest/877/problem/D)Note, that bfs can find right answer, but works in O(n·m·k). It's too slow.We'll store all not visited cells in set. For each row and column we'原创 2023-04-04 17:25:53 · 77 阅读 · 0 评论 -
LiberOJ - 119. 单源最短路
# [LiberOJ - 119. 单源最短路](https://loj.ac/p/119)$Dijsktra,vector存图$$Dijkstra$ **堆优化版** 的 **时间复杂度** 为 $O(mlogn)$原创 2022-10-13 21:25:10 · 98 阅读 · 0 评论 -
第十三届蓝桥杯大赛软件赛决赛C/C++大学B组 H: 机房
H: 机房 —— 参考地址终于算是拿下国赛LCA模板题了思路:给你一个树,求任意两点之间的所有点——直接连接点的数量和,可以说是用LCA。预处理从根节点到子节点的度数之和,然后利用LCA,计算出它们的公共祖先,减去2倍的根节点到公共祖先的度数和,最后在加上公共祖先本身的度数。...原创 2022-08-26 14:36:23 · 623 阅读 · 0 评论 -
2022河南萌新联赛第(五)场:信息工程大学 B - 交通改造
将路口视为点,道路视为边建图,裸的最小生成树问题。原创 2022-08-08 13:17:37 · 66 阅读 · 0 评论 -
2022河南萌新联赛第(四)场:郑州轻工业大学 G - 迷宫
固定源点与汇点,最短路的各种算法都可以写,这道题用双端队列比较好写,但是我用的是优先队列。最短路问题,两两建边,如果目标点为花那么边权为。原创 2022-08-02 15:45:47 · 123 阅读 · 0 评论 -
2022河南萌新联赛第(三)场:河南大学 I - 旅行
解法将每个城市看成两个城市,缴费的,未缴费的,然后让缴费于未缴费的城市建边,跑最短路即可。题意从城市1到城市n,每隔一天多花费w。原创 2022-07-24 19:29:04 · 176 阅读 · 0 评论 -
HDU - 2586 How far away ?(倍增LCA)
倍增法 预处理(nlogn) + 查询(logn)原创 2022-07-23 01:36:13 · 99 阅读 · 0 评论 -
POJ - 2031 Building a Space Station(Prim)
POJ - 2031 Building a Space Station#include <iostream>#include <cstdio>#include <cmath>#include <cstring>using namespace std;const int N = 110;double x[N], y[N], z[N], r[N];double g[N][N], d[N];bool st[N];int main(){ in原创 2022-04-11 14:53:18 · 370 阅读 · 0 评论 -
ZOJ - 1586 QS Network(Prim)
ZOJ - 1586 QS Network(Prim)#include <iostream>#include <cstring>using namespace std;const int N = 510;int n,g[N][N],dist[N],p[N];bool st[N];int prim(){ memset(dist,0x3f,sizeof dist); memset(st,0,sizeof st); dist[1]=0; i原创 2022-04-11 13:16:53 · 94 阅读 · 0 评论 -
POJ - 1611 The Suspects(并查集)
POJ - 1611 The Suspects思路:0是传染源,问和0有关系的数字有多少个,直接或者间接#include<iostream>#include<cstdio>using namespace std;int a[30010],f[30010],book[30010];int find(int x){return f[x]==x?x:f[x]=find(f[x]);}void merge(int v,int u){ int x=find(v); int原创 2021-08-28 23:45:20 · 82 阅读 · 0 评论 -
POJ - 2236 Wireless Network(并查集)
POJ - 2236 题意:在平面坐标系上有n个坏掉的电脑,电脑之前只有距离小于d才能通信(在两台电脑都修好的情况下),有两个查询第一种O x即修理电脑x,第二种S x y即查询x电脑和y电脑之间是否可以通信(间接的也可以)。#include<iostream>#include<cstdio>using namespace std;int f[1010],n,d;struct note{ double x,y;}q[1010];char op;boo原创 2021-08-27 18:36:30 · 99 阅读 · 0 评论 -
POJ - 2492 A Bug‘s Life(并查集)
POJ - 2492 A Bug’s Life题目意思就是 给定n只虫子 不同性别的可以在一起 相同性别的不能在一起 给你m对虫子 判断中间有没有同性别在一起的;我们把同性的放到一个集合里 如果一个集合里出现了异性 则说明存在同性恋在一起 假设 x 为一种性别 x+n为与其相反的性别若a,b为同性 的 我们则可以把判断 (a,b+n)(b,a+n)为异性反之亦然;#include<iostream>#include<cstdio>using namespace s原创 2021-08-27 18:41:50 · 99 阅读 · 0 评论 -
HDU-1272 小希的迷宫(并查集)
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。Inp.原创 2021-02-20 10:21:37 · 101 阅读 · 0 评论 -
HDU - 4496 D-City(并查集)
HDU - 4496 D-City#include<iostream>#include<cstring>using namespace std;const int N = 1000010;struct note{ int a,b;}p[N];int f[N],ans[N];int find(int x){ if(x==f[x]) return x; else return f[x]=find(f[x]);}int main(){ int n,m;原创 2021-08-27 18:44:55 · 74 阅读 · 0 评论 -
HDU - 1213 How Many Tables(并查集)
HDU - 1213 How Many Tables(并查集)#include <stdio.h> int f[1010],n,m; //这里是初始化,非常地重要,数组里面存的是自己数组下标的编号就好了。 void init() { for(int i=1;i<=n;i++) f[i]=i;} //这是找爹的递归函数,不停地去找爹,直到找到祖宗为止,其实就是去找犯罪团伙的最高领导人,//“擒贼先擒王”原则。int getf(int v)原创 2022-03-24 12:20:37 · 97 阅读 · 0 评论 -
POJ - 1182 食物链(并查集)
POJ - 1182 食物链这道题目我们主要是要开三个拓展的域,也就是天敌域,同类域,以及捕食域.1.如果x,y是同类,但是x的捕食域有y,那么错误2.如果x,y是同类,但是x的天敌域有y,那么错误3.如果x是y的天敌,但是x的同类域中有y,那么错误4.如果x是y的天敌,但是x的天敌域中有y,那么错误//这里我们将三个域,分别转化为了n,n+n,n+n+n.因为读入方面特别烦.#include<stdio.h>int fa[200000];int n,m,k,x,y,ans;原创 2021-08-23 20:07:42 · 73 阅读 · 0 评论 -
POJ - 3169 Layout(多源点建图)
POJ - 3169 Layout(多源点建图)因为求的是最大距离,所以用最短路,要找出形如x[i]<=x[j]+c的不等式①序号大的牛不可能在序号小的牛的前面 -> x[i]<=x[i+1]; i+1->i , 0②好感度 -> x[b]-x[a]<=c -> x[b]<=x[a]+c; a->b , c③反感度 -> x[b]-x[a]>=c -> x[a]<=x[b]-c. b->a , c还原创 2022-03-22 22:14:49 · 356 阅读 · 0 评论 -
HDU - 4370 0 or 1(Spfa,Dijkstra)
HDU - 4370 0 or 1(Spfa,Dijkstra)Spfa#include<iostream>#include<cstring>#include<queue>using namespace std;const int N = 310;int n,g[N][N],dist[N];bool st[N];void Spfa(int s){ queue<int> q; memset(dist,0x3f,sizeof原创 2022-03-19 16:05:15 · 206 阅读 · 0 评论 -
HDU - 4725 The Shortest Path in Nya Graph(虚拟点建图)
HDU - 4725 The Shortest Path in Nya Graph(虚拟源点)首先把每一层映成一个点,即第1层代表第n+1个节点如此类推,每一层与层内的建立一条权值为0的有向边,即add(i,x+n,0),然后点与点之间建立一条无向边这没什么好说了,最重要一步就是,第i层的所有点必须要与第i+1层和第i-1层建立一条有向边,即add(x+n-1,i,c),add(x+n+1,i,c)。Dijkstra#include<cstdio>#include<cstri原创 2022-03-16 19:47:09 · 505 阅读 · 0 评论 -
POJ - 1847 Tram(Floyd)
POJ - 1847 Tram(Floyd)#include<iostream>#include<cstring> using namespace std;const int N = 110;int g[N][N];int main(){ memset(g,0x3f,sizeof g); int n,A,B;cin>>n>>A>>B; for(int i=1;i<=n;i++) { int k;cin>>原创 2022-03-16 16:32:58 · 128 阅读 · 0 评论 -
POJ - 2240 Arbitrage(Floyd变型)
POJ - 2240 Arbitrage(Floyd变种)题意:有n种类型的货币求是否存在经过兑换能增值。#include<iostream>#include<cstring>#include<map>using namespace std;const int N = 110;double g[N][N];map<string,int> Si;int main(){ int T=1; while(T) { int n;cin&g原创 2022-03-14 21:40:20 · 214 阅读 · 0 评论 -
POJ - 3660 Cow Contest(Floyd传递闭包)
POJ - 3660 Cow Contest(Floyd传递闭包)#include<iostream>using namespace std;const int N = 110;int w[N][N];int main(){ int n,m;cin>>n>>m; while(m--) { int a,b;cin>>a>>b; w[a][b]=1; } for(int k=1;k<=n;k++) for(in原创 2022-03-14 21:26:15 · 253 阅读 · 0 评论 -
POJ - 3268 Silver Cow Party(Dijkstra,Spfa)
POJ - 3268 Silver Cow Party(Dijkstra)Dijkstra邻接矩阵#include<iostream>#include<cstring>using namespace std;const int N = 1010;int n,m,x;int g[N][N],rg[N][N],dist[N],rdist[N];bool st[N];void dijkstra(int a[N][N],int dist[]){ memset(st,f原创 2022-03-13 20:30:09 · 518 阅读 · 0 评论 -
POJ - 2387 Til the Cows Come Home(Dijkstra,Spfa)
POJ - 2387 Til the Cows Come Home(最短路)题目大意:nnn个点mmm条边的无向图,求111到nnn的最短路径。Dijkstra邻接矩阵存图#include<iostream>#include<cstring>using namespace std;const int N = 1010;int n,m,g[N][N],dist[N]; // 存储1号点到每个点的最短距离bool st[N]; // 存储每个点的最短路是否已经确原创 2022-03-10 16:45:22 · 184 阅读 · 0 评论 -
POJ - 2949 Word Rings(SPFA判正环,01分数规划)
http://poj.org/problem?id=2949#include<cstdio>#include<cstring>#include<vector>#include<queue>using namespace std;typedef pair<int,int> PII;const int N = 710;vector<PII> g[N];double dist[N];int cnt[N];bool s原创 2022-02-11 15:02:03 · 268 阅读 · 0 评论 -
POJ - 2230 Watchcow(欧拉回路)
POJ - 2230 Watchcow(欧拉回路)#include<cstdio>#include<stack>using namespace std;const int N = 10010, M = 50010;int h[N],e[M*2],ne[M*2],idx=1;int n,m;stack<int> s,ans;void add(int a,int b){ e[idx]=b;ne[idx]=h[a];h[a]=idx++;}void e原创 2022-01-26 17:15:00 · 239 阅读 · 0 评论 -
POJ - 1734 Sightseeing trip(Floyd传递闭包)
POJ - 1734 Sightseeing trip#include<iostream>#include<cstring>#include<vector>using namespace std;const int N = 110, INF = 0x3f3f3f3f;int d[N][N],g[N][N],pos[N][N];vector<int> path;void get_path(int i,int j){ if(p原创 2022-01-23 22:08:09 · 174 阅读 · 0 评论 -
POJ - 1094 Sorting It All Out(传递闭包)
POJ - 1094 Sorting It All Out#include<cstdio>#include<cstring>const int N = 26;int n,m;bool d[N][N],st[N];int check(){ for(int i=0;i<n;i++) if(d[i][i]) return 2; for(int i=0;i<n;i++) for(int j=0;j<i;j++) if(!d[i][j原创 2022-01-20 18:35:29 · 185 阅读 · 0 评论 -
POJ - 3662 Telephone Lines(双端队列+二分)
POJ - 3662 Telephone Lines题目描述到nnn有kkk条边可以免费升级,因此只需要求111~NNN的所有路径中第kkk + 111大的值的最小值,是最大最小值模型,因此可以使用二分求解对于区间[0,1000001][0,1000001][0,1000001]中的某一个点xxx:check(x)check(x)check(x)函数表示:::从111走到NNN,最少经过的长度大于xxx的边数的数量是否小于等于kkk,若是则返回truetruetrue,否则返回falsefa原创 2022-01-20 16:22:23 · 308 阅读 · 0 评论 -
POJ - 2449 Remmarguts‘ Date(A∗优化算法)
POJ - 2449 Remmarguts’ DateA∗A∗A∗ 优化算法采用DijkstraDijkstraDijkstra最短路思想,每次扩展最短的路径,第 kk 次到达终点时的路径长度即为第 kkk 短路的长度。由于算法相当于同时进行 kkk 次单元最短路,时间和空间都可能会超限,因此 预处理每个点到终点的最短距离作为估价函数,利用 A∗A∗A∗ 算法优化。复杂度为 O(nklogn)O(nklogn)O(nklogn)。#include<cstdio>#includ原创 2022-01-17 19:02:55 · 100 阅读 · 0 评论 -
POJ - 3635 Full Tank? (Dijkstra)
POJ - 3635 Full Tank?#include <cstring>#include <cstdio>#include <queue>using namespace std;typedef pair<int, int> PII;const int N = 1010, C = 110, M = 20010;int n, m;int h[N], e[M], w[M], ne[M], idx;int price[N];int d原创 2022-01-16 18:41:44 · 510 阅读 · 0 评论 -
ZZULIOJ 1925: 信道安全(Dijkstra,Spfa)
1925: 信道安全先来一个 超时 and 超内存 的 Floyd 算法,深刻理解一下本题的含义#include<stdio.h>double e[10010][10010];int main(){ int t;scanf("%d",&t); while(t--) { int n,m;scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(in原创 2021-12-25 19:42:36 · 1757 阅读 · 0 评论 -
HDU - 2458 Kindergarten(二分图匹配)
HDU - 2458 Kindergarten一群小朋友,男的认识全部的男的,和部分女生,女生认识全部的女生,和部分男生,求最后能最多找出多少人,使得他们互相都认识。#include<cstdio>#include<cstring>const int N = 210;int pre[N],vis[N],match[N][N];int Girl,Boy,m;int dfs(int x){ for(int i=1;i<=Boy;i++) { if(!vis原创 2021-09-09 20:36:43 · 49 阅读 · 0 评论 -
HDU - 2119 Matrix(二分图匹配)
HDU - 2119 Matrix#include<cstdio>#include<cstring>const int N = 110;int pre[N],vis[N],match[N][N];int n,m;int dfs(int x){ for(int i=1;i<=m;i++) { if(!vis[i]&&match[x][i]) { vis[i]=1; if(pre[i]==-1||dfs(pre[i]))原创 2021-09-09 19:20:22 · 77 阅读 · 0 评论