#include using namespace std; #include using namespace atcoder; using ll = long long; int n,c,v; using TUP = tuple; vector S,T,Y,M; vector> G; int cost[50][301]; const int INF = INT_MAX/2; void solve(){ for(int i = 0;i<50;i++){ for(int j = 0;j<301;j++){ cost[i][j] = INF; } } cost[0][0] = 0; priority_queue,greater<>> PQ; PQ.emplace(0,0,0); while(PQ.size()){ auto [fromTime,from,fromMon] = PQ.top(); PQ.pop(); if(cost[from][fromMon]!=fromTime)continue; for(auto [to,toMon,toTime]:G[from]){ //cout<300)continue; int nxTime = fromTime + toTime; if(cost[to][nxMon]>nxTime){ cost[to][nxMon]=nxTime; PQ.emplace(nxTime,to,nxMon); } //cout<> n >> c >> v; S = T = Y = M = vector(v); for(int i = 0;i> S[i]; for(int i = 0;i> T[i]; for(int i = 0;i> Y[i]; for(int i = 0;i> M[i]; G.resize(n); for(int i = 0;i