【dijkstra】【次短路】【fread】hdu6181 Two Paths

题意:给你一张简单无向图,问你1到n的次短路。注意,可以不是简单路径。

存个次短路板子,原理还是挺简单,直接看代码吧。然后这份代码还是个fread的示例用法。

#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
const int BUF=60000000;
char Buf[BUF],*buf=Buf;
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
#define N 100000+10
#define INF 1000000000000000ll
typedef long long ll;
typedef pair<ll, int> Point;
priority_queue<Point,vector<Point>,greater<Point> >Heap;
int n;
ll dist[N],dist2[N];
int e,first[N],nex[N<<1],v[N<<1],w[N<<1];
void AddEdge(int U, int V,int W){
	v[++e]=V;
	w[e]=W;
	nex[e]=first[U];
	first[U]=e;
}
int m,T;
int main()
{
	int x,y,z;
//	freopen("1011.in","r",stdin);
	fread(Buf,1,BUF,stdin);
	read(T);
	for(;T;--T){
		read(n); read(m);
		e=0;
		memset(first,0,sizeof(first));
		for(int i=1;i<=m;++i){
			read(x); read(y); read(z);
			AddEdge(x-1,y-1,z);
			AddEdge(y-1,x-1,z);
		}
		fill(dist,dist+n,INF);
		fill(dist2,dist2+n,INF);
		dist[0]=0;
		Heap.push(Point(0,0));
		while(!Heap.empty()){
			Point o=Heap.top(); Heap.pop();
			int U=o.second;
			ll d=o.first;
			if(dist2[U]<d){
				continue;
			}
			for(int i=first[U];i;i=nex[i]){
				ll d2=d+(ll)w[i];
				if(dist[v[i]]>d2){
					swap(dist[v[i]],d2);
					Heap.push(Point(dist[v[i]],v[i]));
				}
				if(dist2[v[i]]>d2 && dist[v[i]]<d2){
					dist2[v[i]]=d2;
					Heap.push(Point(dist2[v[i]],v[i]));
				}
			}
		}
		printf("%lld\n",dist2[n-1]);
	}
    return 0;
}  
时间: 2024-10-13 16:08:58

【dijkstra】【次短路】【fread】hdu6181 Two Paths的相关文章

poj 2253 Frogger (dijkstra最短路)

题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25773   Accepted: 8374 Description Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sitting on an

poj 1062 昂贵的聘礼 (dijkstra最短路)

题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36799   Accepted: 10616 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低要求.酋长说:"嗯,如果你能够替我弄到大祭司的

uva 11374 最短路+记录路径 dijkstra最短路模板

UVA - 11374 Airport Express Time Limit:1000MS   Memory Limit:Unknown   64bit IO Format:%lld & %llu [Submit]  [Go Back]  [Status] Description ProblemD: Airport Express In a small city called Iokh, a train service, Airport-Express, takes residents to t

hdu 1690 Bus System(Dijkstra最短路)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1690 Bus System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6569    Accepted Submission(s): 1692 Problem Description Because of the huge popula

【啊哈!算法】算法7:Dijkstra最短路算法

上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”.本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”.例如求下图中的1号顶点到2.3.4.5.6号顶点的最短路径. <ignore_js_op> 与Floyd-Warshall算法一样这里仍然使用二维数组e来存储顶点之间边的关系,初始值如下. <ignore_js_op> 我们还需要用一个一维数组dis来存储1号顶点到其余各个顶点的初始路程,如下.

poj 3268 Silver Cow Party(dijkstra最短路)

题目链接:http://poj.org/problem?id=3268 题目大意:给你N个农场,在X农场要举办一个party,其它农场需要到X农场去,然后还要回来,问N个农场中距离最远的那个至少为多少?,给出的边为单向边... 思路:用dijkstra最初X农场到其它几个农场的最短距离,然后在把边反向,继续求出X到其它几个农场的最短距离,算出最大的那一个... code: #include<cstdio> #include<iostream> #include<cstring

洛谷 P1529 回家 Bessie Come Home Label:Dijkstra最短路 &amp;&amp; 乱搞

题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛. 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己). 有时,两个牧场(可能是字母相同的)之间会有超过一条道路相连. 至少有一个牧场和谷仓之间有道路连接. 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径. 当然,

poj 3159 dijkstra 最短路

Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought the kids of flymouse’s class a large bag of candies and had flymouse distribute them. All the kids loved candies very much and ofte

dijkstra(最短路)和Prim(最小生成树)下的堆优化

最小堆: down(i)[向下调整]:从第k层的点i开始向下操作,第k层的点与第k+1层的点(如果有)进行值大小的判断,如果父节点的值大于子节点的值,则修改,并继续对第k+1层与第k+2层的点进行判断和修改,否则不修改,且退出.当点向下移动到树的最后一层,没有子节点供判断与修改,停止操作. 树最多有log(n) 层[log(n)=log2n,一般省略数字2],时间复杂度log(n)次. up(i)[向上调整]:同理,时间复杂度log(n)次. 1.求n个数进行排序: I.建树(n/2次down)