您的位置:首页 > 其它

7_4_N题 Til the Cows Come Home 题解[poj 2387] (最短路)

2016-07-06 20:34 477 查看
题目链接

题意

求从1到n的最短路

思路

模板题,直接Dijkstra跑起。

代码

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#define INF 0x3f3f3f3f3f3f3f3f

using namespace std;
const long long maxn = 1e5+10;
const long long mod = 1e9+13;

struct edge{
long long v,to,cost;
edge(long long t,long long c):to(t),cost(c){};
edge(long long v, long long t,long long c):v(v),to(t),cost(c){};
bool operator < (const edge & a) const{
return cost > a.cost;
}
};

vector <edge> G_a[maxn];
vector <edge> e;

void addedge(long long from, long long to, long long cost){
G_a[from].push_back(edge(to, cost));
G_a[to].push_back(edge(from, cost));
}
long long dis_a[maxn];
long long n;

void Dijkstra(long long s, long long dis[]){
for (long long i = 0 ; i <= n ; i ++){
dis[i] = INF;
}
dis[s] = 0;
priority_queue<edg
4000
e> Q;
Q.push(edge(s,dis[s]));
while(!Q.empty()){
edge tmp = Q.top();Q.pop();
long long limt = G_a[tmp.to].size();
for(long long i = 0 ; i < limt; i ++){
edge& next = G_a[tmp.to][i];
if(dis[next.to] > tmp.cost + next.cost){
dis[next.to] = tmp.cost + next.cost;
Q.push(edge(next.to,dis[next.to]));
}
}
}
}

int main(){
long long s,t;
scanf("%I64d %I64d",&t,&n);
long long from, to, cos;
for (long long i = 0 ; i < t ; i ++){
scanf("%I64d %I64d %I64d",&from,&to,&cos);
addedge(from,to,cos);
e.push_back(edge(from,to,cos));
}
Dijkstra(n,dis_a);
printf("%d\n",dis_a[1]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: