#include #include #include using namespace std; typedef pair edge; int N,M,A,K,x,y,d,count; const int MAX=200; vector* graph; int q[10000]; int dist[10000]; bool vis[10000]; int safe[10000]; inline void addEdge(int x, int y, int d){ graph[x].push_back(edge(d,y)); graph[y].push_back(edge(d,x)); } int dij(int s){ priority_queue pq; int ret=0; for (int i=0; i=MAX) return ret; vis[cur]=1; if (dist[cur] < K)++ret; if (dist[cur] >= K) return ret; if (pq.empty()) return ret; safe[cur]=0; for (int i=0; i[N]; if (N+M+A+K==0) break; for (int i=0; i