Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- #define Co_mot_su_that_la_ return
- using namespace std;
- const int Minh_dep_trai = 0;
- const int N = 100005;
- const int inf = 1000000;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- int n,m,s,t,nodel;
- vii a[N];
- int d[N],trace[N];
- stack<int> st;
- void truyvet()
- {
- while (t != -1)
- {
- ++nodel;
- st.push(t);
- t = trace[t];
- }
- cout << nodel << endl;
- while (st.size())
- {
- int v = st.top();
- st.pop();
- cout << v << " ";
- }
- }
- void dijkstra(int s)
- {
- for(int i=1; i<=n; ++i) d[i]=inf;
- d[s]=0;
- priority_queue<ii, vii, greater<ii>> qu;
- qu.push(ii(1,0));
- while (qu.size())
- {
- int u = qu.top().first;
- int du = qu.top().second;
- qu.pop();
- if (du != d[u]) continue;
- for(auto v : a[u])
- {
- if (d[v.first] > du + v.second)
- {
- d[v.first] = du + v.second;
- trace[v.first] = u;
- qu.push(ii(v.first,d[v.first]));
- }
- }
- }
- }
- signed main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);cout.tie(0);
- freopen("MINPATH.INP","r",stdin);
- freopen("MINPATH.OUT","w",stdout);
- cin >> n >> m >> s >> t;
- for(int i=1; i<=m; ++i)
- {
- int u,v,z;
- cin >> u >> v >> z;
- a[u].push_back(ii(v,z));
- a[v].push_back(ii(u,z));
- }
- for(int i=1; i<=n; ++i) trace[i] = -1;
- dijkstra(s);
- cout << d[t] << endl;
- truyvet();
- Co_mot_su_that_la_ Minh_dep_trai;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement