Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- #define rep(i , size) for(int i =0 ; i<size ; i++)
- #define lp(i , n) for(int i =0 ; i < n; i++ )
- #include <vector>
- using namespace std;
- struct edge
- {
- int from, to, w;
- edge(int from, int to, int w): from(from), to(to), w(w) {}
- bool operator < (const edge & e) const
- {
- return w > e.w;
- }
- };
- vector < vector<edge> > adjList;
- vector <int> dist;
- vector <int> res;
- int Dijkstra2(vector< vector< edge > > adjList, int src, int dest = -1);
- int main()
- {
- int cases ,counter=0,n,m,s,d;
- int from ,to,cost;
- cin>>cases;
- res.resize(cases);
- while(counter<cases)
- {
- cin >>n>>m;
- cin>>s>>d;
- adjList.clear() , adjList.resize(n) ;
- dist.clear(), dist.assign(n,6e5);
- lp(i,m)
- {
- cin >>from>>to>>cost;
- adjList[from].push_back(to).w=cost;
- adjList[to].push_back(from).w=cost;
- }
- res[counter]= Dijkstra2(adjList,s,d);
- counter++;
- }
- for(int i=1;i<=cases;i++)
- {
- cout<<"Case #"+i+":"+res[i-1];
- }
- return 0;
- }
- int Dijkstra2(std ::vector<std:: vector< edge > > adjList, int src, int dest = -1)
- {
- dist[src]=0;
- priority_queue<edge>q;
- q.push(edge(-1,src,0)) ;
- while (!q.empty())
- {
- edge e =q.top();
- q.pop();
- if(e.w>dist[e.to]) continue;
- rep(j,adjList[e.to].size())
- {
- edge k=adjList[e.to][j];
- if(dist[k.to]>dist[k.from]+k.w)
- {
- k.w=dist[k.to]=dist[k.from]+k.w;
- q.push(k);
- }
- }
- }
- return dest==-1? -1 : dist[dest];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement