随笔分类 - 最短路径
摘要:#include "iostream"#include "cstdio"#include "cstring"#include "queue"#include "algorithm"using namespace std;#define mem(a,y) memset(a,y,sizeof(a))#define inf 0x7f7f7f7fconst int maxn = 1100;const int maxm = 30000;struct node{ int v,len,next;}edge[m
阅读全文
摘要:题意:给定一个图,求从1到N的递增边权的最短路。解法:类似于bellman-ford思想,将所有的边先按照权值排一个序,然后依次将边加入进去更新,每条边只更新一次,为了保证得到的路径是边权递增的,每次将相同权值的边全部取出来一同更新,每条边能够更新的前提是某一个端点在之前被更小的边权更新过。另外一个要注意的地方就是一次相同边的更新中,要把所有的更新暂存起来最后一起去更新,这样是为了防止同一权值的边被多次加入到路径中去。#include #include #include #include #include #include using namespace std;typedef __int64
阅读全文
摘要:/*** 题目要求过最少k条边的最短路*/#include #include #include #include #include using namespace std;const int maxn = 5010;const int maxm = 200010;const int INF = 1que; tmp.v = s,tmp.num = 0; dp[tmp.v][tmp.num] = 0; vis[tmp.v][tmp.num] = 1; que.push(tmp); while( !que.empty()){ now = que.front...
阅读全文
摘要:题目大意:给出一个图,其中有一些点是出口,现在有一个罪犯有一个警察,各在两个不同的点。其中警察有一个最大速度160,问罪犯最少需要多大的速度,保证能从某个出口逃跑。一开始看了题目没什么感觉,当将题目看了两三遍后就发现只要到某一个点罪犯用的时间比警察的少则在那个点不会被抓,很显然,到某一个点会走最短路径。所以要用到两次最短路算法,二分罪犯车子的速度,然后搜索在当前速度下是否可以逃脱。注意的地方:1、对于无解可以spfa或者bfs判断一下,上面提出的有解的必要条件肯定没问题2、对于罪犯对整个图的最短路,需要注意的是不能经过警察的起点3、在二分速度之后,判断可以bfs,或者dfs,便是判断可以走到哪
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3986题意:给出一个无向图,Harry Potter的目的是从1到n,而Voldemort为了阻止他,使用魔法毁掉了图中的一条边,问最坏情况下Harry要走的最短路是多少。注意:两点间可以能存在多条路,而且路是双向的,找到最短路后枚举边,求的最短路中最长的那条即为所求,#include#include#includeusing namespace std;const int maxn = 1005;const int INF = 1que;void spfa(bool flg){//求起点到终点的最
阅读全文
摘要:题目地址:题解:题目意思为从起点到终点的最短路中有一条路不能通过了,求到从起点到终点的最短距离。可以先找出从起点到终点的最短距离,并将路径保存下来,然后枚举最短路径中的所有路径,求出从起点到终点的最短路径中最长的一条。#include#include#includeusing namespace std;const int maxn = 1005;const int INF = 200000000;struct node{ int v,t; struct node *next;}*head[maxn],edge[maxn*maxn];int n,m,dis[maxn],per[maxn];bo
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3790最短路问题,因为结果会超int所以最终结果要用__int64位保存。当距离相等的时候,去费用小的路走。#include#includeusing namespace std;#define INF (1v = end; p->d = d; p->cost = cost; p->next = head[start]; head[start] = p++;}void spfa(int start){ int i; for(i = 1; i Q; Q.pus...
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2544简单最短路问题#include#define INF 1 dis[i] + map[i][j]) dis[j] = dis[i] + map[i][j]; } } } for(i = 1; i dis[i] + map[i][j]) return false; } return true;}int main(){ int i,j,a,b,c; ...
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1548本题为简单最短路,构图方法为如果在第i层可以上升Ki层则增加边i - >(i+Ki) 否则不加边,如果可以下降Ki层则增加边i-> (i - Ki)#include#include#includeusing namespace std;#define maxn 205#define INF (1que; que.push(start); while(!que.empty()) { int now = que.front(); vis[now] = true; que.pop();
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1869解题思路:本题为简单最短路,只需要求出两两间的距离,如果存在一个两两间距离大于7的点的话则输出No如果两两间的距离都小于或等于7则输出Yes#include#define INF (1 map[i][k] + map[k][j]) map[i][j] = map[i][k] + map[k][j];}int main(){ int i,j,a,b; while(scanf("%d%d",&n,&m)!= EOF) { for(i = 0; i 7) flg
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2962方法一:使用spfa最短路算法,二分查找最大高度。运行结果:2962140MS612K1790 BC++#include#include#includeusing namespace std;#define INF (1Q; Q.push(start); while( !Q.empty() ) { int now = Q.front(); Q.pop(); vis[now] = false; for(node *p = head[now] ; p ; p = p->next) { ...
阅读全文
摘要:一个人的旅行Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10311 Accepted Submission(s): 3500Problem Description虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2680简单最短路问题。。。。。运行结果:Accepted2680265MS4164K1382 BC++//dijkstra#include#define INF (1 min + map[k][j]) dis[j] = min + map[k][j]; } }}int main(){ int i,j,start,end,cost,w; while(scanf("%d%d%d",&n,&m,&s) != EOF) { for(i = 0; i cost) m
阅读全文
摘要:题目地址:http://poj.org/problem?id=1511方法一:/* 本题使用邻接表采用动态开辟的方式保存所有的边,首先定义一个保存指向的顶点和边所对应权值,*/#include#include#includeusing namespace std;#define NMAX_D 1000005#define NMAX 1000000001int n,m;//定义结构体struct node{ int v,cost; node *next;}edge[NMAX_D],redge[NMAX_D];//定义两个数组,edge用来保存顺向边,redge保存逆向边bool vis[NMAX
阅读全文

浙公网安备 33010602011771号