2387:Til the Cows Come Home
概要
長さ付きの無向辺が与えられる。ノードNからノード1への最短路を求める問題。
純粋なdijkstraの問題。ここぞとばかりにライブラリの実験をしてみた。一応無事AC。ちなみに同じノード間を繋ぐが長さが違う辺もあるらしく、見事に引っかかってしまった。
#define INF (1<<28) vector<int> dijkstra(vector< vector<int> > graph, int s){ int n = (int)graph.size(); vector<int> dist(n,INF); priority_queue<pair<int, int>,vector< pair<int, int> >, greater< pair<int, int> > > Q; dist[s] = 0; Q.push(make_pair(0,s)); while(!Q.empty()){ pair<int, int> top = Q.top(); Q.pop(); int v = top.second, d = top.first; if(d <= dist[v]){ for(int v2=0; v2<n; v2++){ if(dist[v2] > dist[v] + graph[v][v2]){ dist[v2] = dist[v] + graph[v][v2]; Q.push(make_pair(dist[v2], v2)); } } } } return dist; } int main(){ int t, n, i, a, b, c; scanf("%d%d",&t,&n); vector< vector<int> > graph(n, vector<int>(n,INF)); REP(i,t){ scanf("%d%d%d",&a,&b,&c); graph[a-1][b-1] = graph[b-1][a-1] = min(graph[a-1][b-1], c); } vector<int> dist = dijkstra(graph, n-1); printf("%d\n", dist[0]); return 0; }