Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define speed ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
- #define pb push_back
- #define mp make_pair
- #define ppb pop_back
- #define F first
- #define S second
- #define sz(x) (int)(x.size())
- #define all(x) x.begin(), x.end()
- #define rall(x) x.rbegin(), x.rend()
- #define gcd __gcd
- #define sqrt sqrtl
- #define nl '\n'
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- typedef pair <int, int> pii;
- const int N = 1e5+5;
- const ll INF = (ll)1e16;
- const int inf = INT_MAX;
- const int mod = 1e9+9;
- const double EPS = 1e-9;
- const int P = 71;
- struct node{
- int u, v, w;
- };
- int n, m, d, mx = -inf, par[N];
- vector <vector <int> > g(N);
- vector <node> vec;
- vector <int> weights, path;
- bool used[N];
- void precalc(){
- return;
- }
- bool cmp(node a, node b){
- return a.w < b.w;
- }
- void CL(){
- for(int i = 0; i <= n; i++){
- g[i].clear();
- used[i] = par[i] = 0;
- }
- }
- void dfs(int v, int depth, int p){
- if(depth > d)
- return;
- used[v] = 1;
- par[v] = p;
- if(v == n){
- vector <int> tmp;
- while(v != 0){
- tmp.pb(v);
- v = par[v];
- }
- path = tmp;
- return;
- }
- for(int x : g[v]){
- if(!used[x])
- dfs(x, depth+1, v);
- }
- }
- bool check(int x){
- for(int i = 0; i < sz(weights); i++){
- if(weights[i] > x)
- break;
- g[vec[i].u].pb(vec[i].v);
- }
- vector <int> cur_path = {};
- dfs(1, 0, 0);
- bool res = used[n];
- CL();
- return res;
- }
- void solve(){
- cin >> n >> m >> d;
- for(int i = 1; i <= m; i++){
- int u, v, w;
- cin >> u >> v >> w;
- vec.pb({u, v, w});
- weights.pb(w);
- mx = max(mx, w);
- }
- sort(all(vec), cmp);
- sort(all(weights));
- int l = -1, r = mx+1, mid;
- while(l + 1 < r){
- mid = (l + r) >> 1;
- if(check(mid))
- r = mid;
- else
- l = mid;
- }
- if(r == mx+1){
- cout << -1 << nl;
- return;
- }
- reverse(all(path));
- cout << sz(path)-1 << nl;
- for(int x : path)
- cout << x << ' ';
- cout << nl;
- }
- int main() {
- speed;
- //freopen("main.in","r",stdin);
- //freopen("main.out","w",stdout);
- int T = 1;
- precalc();
- while (T--)
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment