Advertisement
MinhNGUYEN2k4

Hight

Aug 10th, 2020 (edited)
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. const int N = 100005;
  5.  
  6. struct data
  7. {
  8.     int u,v,w;
  9. };
  10.  
  11. int n,s,t,res,trace[N];
  12. int m =1;
  13. data a[N];
  14. vector<int> b[N];
  15. bool mark[N];
  16. queue<int> st;
  17. int root[N];
  18.     bool ispath=false;
  19. vector < data > kq;
  20.  
  21. bool cmp(data a, data b)
  22. {
  23.     return a.w > b.w;
  24. }
  25.  
  26. int getRoot (int u)
  27. {
  28.     return (root[u]) ? root[u] = getRoot(root[u]) : u;
  29. }
  30.  
  31. void kruskal()
  32. {
  33.     sort(a+1,a+1+m,cmp);
  34.     memset(root, 0, sizeof(root));
  35.     for(int i=1; i<=m; i++)
  36.     {
  37.         int p = getRoot(a[i].u);
  38.         int q = getRoot(a[i].v);
  39.         if (q != p)
  40.         {
  41.             b[a[i].u].push_back(a[i].v);
  42.             b[a[i].v].push_back(a[i].u);
  43.             root[p]=q;
  44.             res = a[i].w;
  45.             if (getRoot(s)==getRoot(t)) {ispath=true;break;}
  46.         }
  47.     }
  48.     if (!ispath) cout << 0 << endl;
  49. }
  50.  
  51. void bfs()
  52. {
  53.     mark[s]=true;
  54.     st.push(s);
  55.     while (!st.empty())
  56.     {
  57.         int u = st.front();
  58.         st.pop();
  59.         for(int v : b[u])
  60.         {
  61.             if (!mark[v])
  62.             {
  63.                 mark[v]=true;
  64.                 trace[v]=u;
  65.                 st.push(v);
  66.             }
  67.         }
  68.     }
  69. }
  70.  
  71. void ghi()
  72. {
  73.     stack<int> res;
  74.     while (t != 0)
  75.     {
  76.         res.push(t);
  77.         t = trace[t];
  78.     }
  79.  
  80.     while (res.size())
  81.     {
  82.         int v = res.top();
  83.         res.pop();
  84.         cout << v << endl;
  85.     }
  86. }
  87.  
  88. signed main()
  89. {
  90.     ios_base::sync_with_stdio(false);
  91.     cin.tie(0);cout.tie(0);
  92.     freopen("hight.inp","r",stdin);
  93.     cin >> n >> s >> t;
  94.     while (cin >> a[m].u >> a[m].v >> a[m].w) ++m;
  95.     kruskal();
  96.     if (!ispath) return 0;
  97.     bfs();
  98.     //cout << s << " " << t << endl;
  99.     cout << res << endl;
  100.     ghi();
  101.     return 0;
  102. }
  103.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement