giabinh

TaiTrong

Jun 4th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int a[25][25], trace[25], ways[25], n, s, t, ans, m;
  6. vector <int> b;
  7.  
  8. void DFS(int u, int w) {
  9.     for (int v=1; v<=n; ++v)
  10.         if (trace[v]==0 && a[u][v]>0 && a[u][v]>=w) {
  11.             trace[v]=u; DFS(v, w);
  12.         }
  13. }
  14.  
  15. void solve(int w) {
  16.     memset(trace, 0, sizeof(trace)); trace[s]=-1;
  17.     DFS(s, w);
  18.  
  19.     if (trace[t]!=0 && w>ans) {
  20.         ans=w;
  21.  
  22.         int tmp=t; m=0;
  23.         while (tmp!=s) {
  24.             ways[m++]=tmp; tmp=trace[tmp];
  25.         }
  26.         ways[m]=s;
  27.     }
  28. }
  29.  
  30. int main() {
  31.     freopen("taitrong.inp", "r", stdin);
  32.  
  33.     scanf("%d%d%d", &n, &s, &t);
  34.     memset(a, 0, sizeof(a)); ans=-1;
  35.     int u, v, w;
  36.     while (scanf("%d%d%d", &u, &v, &w) != EOF) {
  37.         a[u][v]=a[v][u]=w;
  38.         b.push_back(w);
  39.     }
  40.  
  41.     int vec=b.size(); bool done[10005];
  42.     memset(done, false, sizeof(done));
  43.     for (int i=0; i<vec; ++i)
  44.         if (!done[b[i]]) {
  45.             solve(b[i]); done[b[i]]=true;
  46.         }
  47.  
  48.     printf("%d\n", ans);
  49.     for (int i=m; i>=0; i--) printf("%d ", ways[i]);
  50.  
  51.     return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment