Advertisement
Guest User

Untitled

a guest
Sep 30th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<stack>
  5. using namespace std;
  6.  
  7.  
  8. int viz[50010];
  9.  
  10. vector<int> G[50010];
  11. vector<int> stk;
  12.  
  13. int A[5010][5010];
  14. int o[5010];
  15. int d1[5010],d2[5010];
  16. void sort_top(int x)
  17. {
  18. viz[x] = 1;
  19.  
  20. for (int i = 0;i < G[x].size();++i)
  21. if (!viz[G[x][i]])
  22. sort_top(G[x][i]);
  23. stk.push_back(x);
  24.  
  25. }
  26.  
  27.  
  28. int main()
  29. {
  30.  
  31. int N, M, T;
  32. cin >> N >> M >> T;
  33.  
  34. for (int i = 1;i <= M;++i)
  35. {
  36. int x, y,c;
  37. cin >> x >> y >> c;
  38. G[x].push_back(y);
  39. A[x][y]=c;
  40. }
  41.  
  42. for (int i = 1;i <= N;++i)
  43. if (!viz[i])
  44. sort_top(i);
  45. d2[stk.size()-1]=1;
  46. for(int i=stk.size()-2;i>=0;--i)
  47. {
  48. for(int j=stk.size()-1;j>i;--j)
  49. if(A[stk[j]][stk[i]]!=0 && d1[stk[j]] + A[stk[j]][stk[i]] <= T && d2[stk[j]] + 1 >= d2[stk[i]])
  50. d1[stk[i]]=d1[stk[j]] + A[stk[j]][stk[i]], d2[stk[i]] =d2[stk[j]] + 1,o[stk[i]]=stk[j];
  51. }
  52.  
  53.  
  54. stk.clear();
  55. int i=N;
  56. while(i)
  57. stk.push_back(i),i=o[i];
  58. cout<<stk.size()<<'\n';
  59.  
  60. for(int i=stk.size()-1;i>=0;--i)
  61. cout<<stk[i]<<" ";
  62.  
  63.  
  64.  
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement