hdu5521(Meeting)spfa 层次网络最短路】的更多相关文章

题意:给出几个集合,每个集合中有Si个点 且任意两个点的距离为ti,现在要求两个人分别从1和n出发,问最短多长时间才能遇到,且给出这些可能的相遇点; 取两个人到达某点时所用时间大的值 然后取最小的  若有多个结果 则按点的升序排列 解析: 比较裸的最短路 ,但坑在建图上,Si的和小于1e6  那么建的边肯定会超内存  所以压缩一下,把每个集合看作一个点  集合中的点到集合的距离为0  集合到集合中的点的距离为ti   即入为0 出为ti    然后普通最短路求就好了 spfa: #include…
HDU5521 Meeting 题意: 给你n个点,它们组成了m个团,第i个团内有si个点,且每个团内的点互相之间距离为ti,问如果同时从点1和点n出发,最短耗时多少相遇 很明显题目给出的是个无负环的图,且要跑出单源最短路,那不就是个dij吗 大方向定下,但图该怎么建呢? way1: 给每个团内的所有点两两暴力建边 如图所示:黑的为点,红的为团,相同颜色的边长度相等 共 \(\sum ^{m}_{i=1}\dfrac {1}{2}s_{i}\left( s_{i}-1\right)\) 条边 而…
spfa(最短路求解) 模板: #include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; const int maxn = 105; const int maxm = 100005; struct Edge{ int to,w,next; }edge[maxm<<1]; int tot = 0,dis[maxn],cnt[m…
acwing851-spfa求最短路 #include<iostream> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int N=1e5+10; int n,m; int idx,h[N],ne[N],e[N],w[N],dis[N]; bool st[N]; void add(int a,int b,int W) { e[idx]=b;…
AcWing 851 spfa求最短路 题解 以此题为例介绍一下图论中的最短路算法 \(Bellman\)-\(Ford\) 算法.算法的步骤和正确性证明参考文章最短路径(Bellman-Ford算法) 松弛函数 对边集合 \(E\) 中任意边,\(w(u,v)\) 表示顶点 \(u\) 到顶点 \(v\) 的边的权值,用 \(d[v]\) 表示当前从起点 \(s\) 出发到顶点 \(v\) 的最短距离. 若存在边 \(e\),权值为 \(w(u,v)\),使得: \[d[v] > d[u] +…
题目链接: Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 2024    Accepted Submission(s): 628 Problem Description Bessie and her friend Elsie decide to have a meeting. However, after Farm…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意: 有 \(n\) 个点 \(m\) 个集合,一个点可能处于若干个集合内,属于第 \(i\) 个集合的任意两点间的距离是 \(t_i\) ,点 \(1\) 是起点,点 \(n\) 是终点. 你现在需要找到所有点中到 \(1\) . \(n\) 两点的距离的较大值的最小值,并输出所有满足要求的点. 解题思路: 这道题目难的不是最短路,而是建图. 因为最多可能有 \(n\) 个点在同一个集…
题意:有N个点,给定M个集合,集合Si里面的点两两之间的距离都为Ti,集合里面的所有点数之和<=1e6.有两个人分别在1和N处,求1个点使得两个人到这一点距离的最大值最小 思路:这题是裸的最短路问题,难点在建图.然而建图也只有1步,在集合外新建1个点,每个点向它连一条Ti/2的边(避免浮点数,可以先乘2,然后结果除以2).如此巧妙... #include <bits/stdc++.h> using namespace std; #define X first #define Y seco…
最短路计数 [问题描述]   给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. [输入格式]   输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边. [输出格式]   输出包括N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出mod 100003后的结果即可.如果无法到达顶点i则输出0. [输入样…
原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有向图,有 $n$ 个节点 $m$ 条边,边权值 $\in[0,1000]$ . 小明要从 $1$ 走到 $n$ ,要求路径长度最大为 $d+k$ ,其中 $d$ 为 $1$ 到 $n$ 最短路长度. 问小明有多少种走法,答案对 $p$ 取模.如果有无数种走法,那么输出 $-1$ . $n\leq 1…
题目链接:https://cn.vjudge.net/contest/66569#problem/A 代码: vis数组代表是否还有用,首先初始化为0,首先第一个点入队列,标记为1,然后刚入队列的时候,取消标记,如果经过判断之后还有用,就再标记.然后再就是出发点的路径,因为是从起始点开始走,所以从1->1这个路径的权值就应该初始化为0.然后再就是对取最短路的判断,如果某一路径上找到了权重更短的路径,更改值,然后判断一下是否在队列中,如果没有,入队列,标记一下. #include<iostrea…
传送门 题目 Bessie and her friend Elsie decide to have a meeting. However, after Farmer John decorated his fences they were separated into different blocks. John's farm are divided into n blocks labelled from 1 to n.Bessie lives in the first block while E…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是一个人从1开始走,一个人从n开始走.让最后相遇的时间最短. 题目就是个最短路,不过唯一不同的是,题目图的描述方式比较特别. 从规模上来看,想把这张图描述成邻接矩阵或者邻接表是不可能的. 必然只能按照题目要求的意思来存. 于是第一步存图的方式,我采用了两个vector数组,(当然此处可以使用链式前向星),一个存了和点相关的集合有哪些in[]…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1726 题意: 给你一个无向图,求次短路. 题解: 两种方法. 方法一: 一遍spfa,在spfa内维护最短路dis和次短路sec. 分三种情况: (1)dis[now]可以更新dis[dest]. (2)dis[now]不能更新dis[dest],但dis[now]可以更新sec[dest]. (3)dis[now]不能更新dis[dest]和sec[dest],但sec[now]可以更…
题目链接:https://www.jisuanke.com/contest/3004?view=challenges 题目大意: 1.一个无向图,给出六个顶点,添六条边,但是添边是有限制的.每次添边的权值要最小. 2.不能构成negative-weighted loop,negative-weighted loop指的是循环加权和为负,即从一个顶点出发在回到这个顶点的经过路径的权值和必须是 >= 0的.所以让你在u,v顶点天一条边,可以计算v - > u的最短路,然后加个负号取反.然后再加边执…
//Accepted 4688 KB 63 ms #include <cstdio> #include <cstring> #include <iostream> #include <queue> #include <cmath> #include <algorithm> using namespace std; /** * This is a documentation comment block * 如果有一天你坚持不下去了,就想…
SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复杂度和朴素 Bellman-Ford 相同,为 O(VE),但是一般情况下他的复杂度还是很优秀的,为O(mn),其中稀疏图中m约等于2,稠密图...关于SPFA:他死了,n为边数(值得一提,有的非常bt的数据会故意卡spfa不让你过   比如仙人掌图什么的) 算法大意:设立一个队列来保存所有待优化的结点,先初始化所有最短路径,然后从起点开始不断遍历每一条边,…
World Exhibition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2162    Accepted Submission(s): 1063 Problem Description Nowadays, many people want to go to Shanghai to visit the World Exhibiti…
其实还是从一个x点出发到所有点的最短路问题.来和回只需分别处理一下逆图和原图,两次SPFA就行了. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<map> #include<set> #include<vector> #…
Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 36   Accepted Submission(s) : 16 Problem Description 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为"小世界现象(small world phenomenon)"的著名假说.大意是说.不论什么2个素不相识的人中间最多…
思路:先算出每个点到1的最短路d1[i],记录下路径,然后枚举最短路上的边 删掉之后再求一遍最短路,那么这时的最短路就可能是答案. 但是这个做法是错误的,可以被卡掉. 比如根据下面的例题生成的一个数据,可以完美的证明那个做法是错误的. 5 4 1 12 13 13 24 1 1 22 33 53 4 正确做法: 求出从起点S到每个点的最短路径ds[i],在求出每个点到终点T的最短路dt[i] 然后枚举每条边 u - > v 边权为 c ans=min{ds[u]+c+dt[v]}  (  ans…
给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible. 数据保证不存在负权回路. 输入格式 第一行包含整数n和m. 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z. 输出格式 输出一个整数,表示1号点到n号点的最短距离. 如果路径不存在,则输出”impossible”. 数据范围 1≤n,m≤1051≤n,m≤105,图中涉及边长绝对值均不超过10000…
#include <cstring> #include <iostream> #include <algorithm> #include <queue> using namespace std; ; int n, m; int h[N], w[N], e[N], ne[N], idx; int dist[N]; bool st[N];//标记数字是否在队列中,防止存重复的点 void add(int a, int b, int c) { e[idx] = b…
给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible. 数据保证不存在负权回路. 输入格式 第一行包含整数n和m. 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z. 输出格式 输出一个整数,表示1号点到n号点的最短距离. 如果路径不存在,则输出”impossible”. 数据范围 1≤n,m≤1051≤n,m≤105,图中涉及边长绝对值均不超过10000…
地址 https://www.acwing.com/problem/content/description/853/ 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible. 数据保证不存在负权回路. 输入格式 第一行包含整数n和m. 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z. 输出格式 输出一个整数,表示1号点到n号点的最短距离. 如果路径不存在,…
K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点加入堆中,维护堆,再从堆顶取当前g值最小的点(此时为第2短路),再添加相邻的点放入堆中,依此类推······保证第k次从堆顶取到的点都是第k短路(至于为什么,自己想)其实就是A*算法,这里太啰嗦了 1 #include<queue> 2 #include<cstdio> #includ…
题目链接:http://hihocoder.com/problemset/problem/1081 SPFA求最短路,是不应-羁绊大神教我的,附上头像. 我第一次写SPFA,我用的vector存邻接表,以后也会保持这种习惯.每个元素是一个pair类型,分别表示可连接的点,和权值. SPFA:把起点放到队列,扫一遍可以链接的点,每一次松弛条件是:dist[next.first] = min(dist[next.first],dist[f]+next.second);就是说J—>S或者J—>K—&…
Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样,选择最短路. 贝茜所在的乡村有R(1<=R<=100,000)条双向道路,每条路都联结了所有的N(1<=N<=5000)个农场中的某两个.贝茜居住在农场1,她的朋友们居住在农场N(即贝茜每次旅行的目的地). 贝茜选择的第二短的路径中,可以包含任何一条在最短路中出现的道路,并且,一条路可…
题目链接 Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not want to get to her old home too quickly, because she likes the scenery along the way. She has decided to take the second-s…
%%%暴搜出奇迹%%%@SiriusRen 其实我刚开始题读错了,才导致我写图论... spfa跑最短路,开一个node记录状态(pair当然滋磁):所在楼层和槽的位置 以层数为1,槽在0的位置 为初始状态并进队,向每一个合法位置扩展,跑spfa,直到收敛. #include<cstdio> #include<iostream> #include<queue> #include<cstring> #include<cmath> #define R…