| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
贴份代码#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<memory.h>
#include<fstream>
using namespace std;
const int INF = 1<<29;
const int nMax = 10000;
struct edge{
edge(){}
edge(int x,int y){
cost = x;
to = y;
}
bool operator<(const edge& rhs)const{
return cost > rhs.cost;
}
int cost ;
int to;
};
vector<edge> node[nMax];
int dist1[nMax];
int dist2[nMax];
void dijkstra(int s){
for (int i = 0;i<nMax;++i)
dist1[i] = INF;
for (int i = 0;i<nMax;++i)
dist2[i] = INF;
dist1[s] = 0;
priority_queue<edge,vector<edge>> q;
q.push( edge(0,s));
edge u ;
while (!q.empty())
{
u = q.top();q.pop();
int sz = node[u.to].size();
int v = u.to;
if (u.cost > dist2[v])
continue;
for (int i = 0;i<sz;++i)
{
int next = node[v][i].to;
int d = node[v][i].cost + u.cost;
if (d < dist1[next])
{
swap(d,dist1[next]);
q.push(edge(dist1[next],next));
}
if (d > dist1[next] && d < dist2[next])
{
dist2[next] = d;
q.push(edge(dist2[next],next));
}
}
}
}
int main(){
//FILE *p = freopen("data.txt","r",stdin);
int n,r;
cin >> n >> r;
int x,y,cost;
for (int i = 0;i<r;++i){
cin >> x >>y >> cost;
node[x].push_back( edge(cost,y));
node[y].push_back( edge(cost,x));
}
dijkstra(1);
printf("%d\n",dist2[n]);
//fclose(p);
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator