Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair< ll, ll > pii;
- const ll MAX = 1024;
- const ll INF = 0x3f3f3f3f;
- vector< pii > G[MAX];
- ll d[MAX];
- void dijkstra(ll start)
- {
- ll u, v, i, c, w;
- priority_queue< pii, vector< pii >, greater< pii > > Q;
- memset(d, INF, sizeof d);
- Q.push(pii(0, start));
- d[start] = 0;
- while(!Q.empty())
- {
- u = Q.top().second;
- Q.pop();
- for(i = 0; i < G[u].size(); i++)
- {
- w = G[u][i].first;
- v = G[u][i].second;
- if(d[v] > max(d[u],w))
- {
- d[v] = min(d[v],max(w,d[u]));
- Q.push(pii(d[v], v));
- }
- }
- }
- }
- int main()
- {
- ll n, e, i, u, v, w, start,t,cas=1;
- scanf("%lld",&t);
- while(t--)
- {
- scanf("%lld %lld", &n, &e);
- for(i = 0; i <= n; i++)
- G[i].clear();
- for(i = 0; i < e; i++)
- {
- scanf("%lld %lld %lld", &u, &v, &w);
- G[u].push_back(pii(w, v));
- G[v].push_back(pii(w, u));
- }
- scanf("%lld",&start);
- dijkstra(start);
- printf("Case %lld:\n", cas++);
- for(int i=0; i<n; i++)
- {
- if(d[i] >= INF)
- printf("Impossible\n");
- else
- printf("%lld\n",d[i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment