Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- #define ii pair<int, int>
- using namespace std;
- struct Arista
- {
- int v, w;
- };
- struct Grafo
- {
- vector <vector <Arista> > adj;
- vector <int> dist;
- void leer()
- {
- int n, m, a, b, w;
- cin >> n >> m;
- adj = vector <vector <Arista> > (n+1, vector <Arista> ());
- dist = vector <int> (n+1, 999999999);
- Arista edge, edge2;
- for(int i=0; i<m; i++)
- {
- cin >> a >> b >> w;
- edge.v = b;
- edge.w = w;
- adj[a].push_back(edge);
- edge2.v = a;
- edge2.w = w;
- adj[b].push_back(edge2);
- }
- int s;
- cin >> s;
- priority_queue<ii, vector <ii>, greater <ii> > pq;
- dist[s] = 0;
- pq.push(ii(0, s));
- while(pq.size())
- {
- ii p = pq.top();
- pq.pop();
- s = p.second;
- for(int i=0; i<adj[s].size(); i++)
- {
- if(dist[s]+adj[s][i].w < dist[adj[s][i].v])
- {
- dist[adj[s][i].v] = dist[s]+adj[s][i].w;
- pq.push(ii(dist[adj[s][i].v], adj[s][i].v));
- }
- }
- }
- for(int i=1; i<dist.size(); i++)
- {
- if(dist[i] == 999999999)
- cout << -1 << " ";
- else if(dist[i])
- cout << dist[i] << " ";
- }
- cout << endl;
- }
- };
- int main()
- {
- int tc;
- cin >> tc;
- while(tc--)
- {
- Grafo g;
- g.leer();
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment