#include <bits/stdc++.h> #define ll long long #define PII pair<pair<ll,ll>,int > using namespace std; struct E{ int v; ll w; int nex; }e[200005]; int cnt=0; int head[200005]; int vis[200005]; pair<ll,ll> dis[200005]; int n,m,V,t; int x,y; ll z; priority_queue<PII,vector<PII>,greater<PII> > q; void add(int u,int v,int w) { e[++cnt].v=v; e[cnt].w=w; e[cnt].nex=head[u]; head[u]=cnt; } pair<ll,ll> ad(pair<ll,ll> aa,int bb) { if(aa.second+bb<=V) { aa.second+=bb; } else { aa.first++; aa.second=bb; } return aa; } int main() { memset(head,-1,sizeof(head)); cin>>n>>m>>V>>t; for(int i=1;i<=n;i++) dis[i]={0x7fffffff,0x7fffffff}; for(int i=1;i<=m;i++) { cin>>x>>y>>z; add(x,y,z); add(y,x,z); } dis[t]={1,0}; q.push({{1,0},t}); while(!q.empty()) { int now=q.top().second; q.pop(); if(vis[now]) continue; vis[now]=1; for(int i=head[now];i!=-1;i=e[i].nex) { int v=e[i].v; int w=e[i].w; if(ad(dis[now],w)<dis[v]) { dis[v]=ad(dis[now],w); q.push({dis[v],v}); } } } for(int i=1;i<=n;i++) { if(dis[i].first!=0x7fffffff) cout<<dis[i].first<<" "; else cout<<"-1 "; } cout<<"\n"; return 0; }
|