标签:
Description
#include<iostream> #include<cstring> #include<queue> using namespace std; ///////////////////////////////////////////////////////////////// const int MaxN=1010; const int INF=10e8; struct Node { int v,val; Node(int _v=0,int _val=0):v(_v),val(_val) {} bool operator < (const Node &a) const { return val>a.val; } }; struct Edge { int v,cost; Edge(int _v=0,int _cost=0):v(_v),cost(_cost) {} }; vector <Edge> E[MaxN]; bool vis[MaxN]; void Dijkstra(int lowcost[],int n,int start) { priority_queue <Node> que; Node qtemp; int len; int u,v,cost; for(int i=1;i<=n;++i) { lowcost[i]=INF; vis[i]=0; } lowcost[start]=0; que.push(Node(start,0)); while(!que.empty()) { qtemp=que.top(); que.pop(); u=qtemp.v; if(vis[u]) continue; vis[u]=1; len=E[u].size(); for(int i=0;i<len;++i) { v=E[u][i].v; cost=E[u][i].cost; if(!vis[v] && lowcost[v]>lowcost[u]+cost) { lowcost[v]=lowcost[u]+cost; que.push(Node(v,lowcost[v])); } } } } inline void addEdge(int u,int v,int c) { E[u].push_back(Edge(v,c)); } ///////////////////////////////////////////////////////////////// int ans[1010]; int main() { ios::sync_with_stdio(false); int N,T; int a,b,c; cin>>T>>N; for(int i=1;i<=T;++i) { cin>>a>>b>>c; addEdge(a,b,c); addEdge(b,a,c); } Dijkstra(ans,N,N); cout<<ans[1]<<endl; return 0; }
(简单) POJ 2387 Til the Cows Come Home,Dijkstra。
标签:
原文地址:http://www.cnblogs.com/whywhy/p/4338585.html