#include #include #include #include #include using namespace std; const int maxn=110; const int oo=0x3fffffff; int S[maxn], C[maxn]; int mp[maxn], visit[maxn][3*maxn]; int map[maxn][maxn], cap[maxn][maxn], dis[maxn][3*maxn]; int n, m, V, T, st, sd, ss, dd; struct node { int u, t; }; void floyd() { ss=n, dd=n+1, S[dd]=0; for(int k=0; kmap[i][k]+map[k][j]) map[i][j]=map[i][k]+map[k][j]; for(int i=0; iq; for(int i=0; i<=n+1; i++) for(int j=0; j<=V; j++) dis[i][j]=-oo, visit[i][j]=0; node s, p; s.u=ss, s.t=0; q.push(s); dis[ss][0]=0; visit[ss][0]=1; while(!q.empty()) { p=q.front(); q.pop(); visit[p.u][p.t]=0; for(int i=0; i<=n+1; i++) { if(p.u!=i&&cap[p.u][i]!=oo) { int tp=p.t+cap[p.u][i]; if(tp<=V&&dis[i][tp]> T; for(int tcase=1; tcase<=T; tcase++) { scanf("%d%d%d%d%d",&n,&m,&V,&st,&sd); for(int i=0; i<=n+1; i++) for(int j=0; j<=n+1; j++) { map[i][j]=oo, cap[i][j]=oo; if(i==j) map[i][j]=cap[i][j]=0; } for(int i=0; i