#include using namespace std; struct pnode { int to; int k; int jumps; bool operator<(const pnode& o) const { return jumps>o.jumps || jumps==o.jumps && k>N>>M>>S>>K; S--; vector D(N,0); for(int i=1;i>D[i]; D[i]--; } vector> adj(N); for(int i=0;i>from>>to; from--,to--; adj[from].push_back(to); adj[to].push_back(from); } vector bestk(N,-1); vector res(N,INT_MAX); res[0]=0; priority_queue pq; pq.push({S,K,0}); int sti=0; while(!pq.empty()) { int v=pq.top().to; int k=pq.top().k; int j=pq.top().jumps; pq.pop(); if(bestk[v]>k)continue; bestk[v]=k; res[v]=min(res[v],j); //cout<<"just set res[v] "<0) { for(int& n:adj[v]) { if(bestk[n]0) { for(int& n:adj[par]) { if(bestk[n]