//ダイクストラ法? //Nこの町。S->Tに行くのにY円M時間 //1->Nに行く、C円ある。 //最短時間を求める #include #include #include #define NMAX (50) #define VMAX (1500) #define CMAX (300) #define NONE (-1) //提出前に0にする #define DEBUGMODE 0 typedef struct roadData{ int t; int y; int m; } ROADDATA; typedef struct nowData{ int n; int c; } NOWDATA; int main(void){ int N,C,V; int inS[VMAX],inT[VMAX],inY[VMAX],inM[VMAX]; std::vector road[NMAX+1]; std::stack now; int map[NMAX+1][CMAX+1]; std::cin>>N>>C>>V; for(int i=0;i>inS[i]; } for(int i=0;i>inT[i]; } for(int i=0;i>inY[i]; } for(int i=0;i>inM[i]; } for(int i=0;i=road[n.n][i].y){ int tc=n.c-road[n.n][i].y; int tm=map[n.n][n.c]+road[n.n][i].m; if(map[road[n.n][i].t][tc]==NONE||map[road[n.n][i].t][tc]>tm){ NOWDATA tmpN; tmpN.c=tc; tmpN.n=road[n.n][i].t; now.push(tmpN); map[road[n.n][i].t][tc]=tm; } } } } int ans=NONE; for(int i=0;i<=C;i++){ if(DEBUGMODE==1){ std::cout<map[N][i])){ ans=map[N][i]; } } if(DEBUGMODE==1){ std::cout<