Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<algorithm>
- #include<vector>
- #include<stack>
- using namespace std;
- int viz[50010];
- vector<int> G[50010];
- vector<int> stk;
- int A[5010][5010];
- int o[5010];
- int d1[5010],d2[5010];
- void sort_top(int x)
- {
- viz[x] = 1;
- for (int i = 0;i < G[x].size();++i)
- if (!viz[G[x][i]])
- sort_top(G[x][i]);
- stk.push_back(x);
- }
- int main()
- {
- int N, M, T;
- cin >> N >> M >> T;
- for (int i = 1;i <= M;++i)
- {
- int x, y,c;
- cin >> x >> y >> c;
- G[x].push_back(y);
- A[x][y]=c;
- }
- for (int i = 1;i <= N;++i)
- if (!viz[i])
- sort_top(i);
- d2[stk.size()-1]=1;
- for(int i=stk.size()-2;i>=0;--i)
- {
- for(int j=stk.size()-1;j>i;--j)
- if(A[stk[j]][stk[i]]!=0 && d1[stk[j]] + A[stk[j]][stk[i]] <= T && d2[stk[j]] + 1 >= d2[stk[i]])
- d1[stk[i]]=d1[stk[j]] + A[stk[j]][stk[i]], d2[stk[i]] =d2[stk[j]] + 1,o[stk[i]]=stk[j];
- }
- stk.clear();
- int i=N;
- while(i)
- stk.push_back(i),i=o[i];
- cout<<stk.size()<<'\n';
- for(int i=stk.size()-1;i>=0;--i)
- cout<<stk[i]<<" ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement