#include #include #include #include using namespace std; using ll = long long; using pli = pair; struct line{ int to; ll t; }; using Graph = vector>; const ll INF = 1LL<<50; Graph G(100010); ll D[100010]; ll A[100010], B[100010], C[100010]; void Dijkstra(int src){ fill(&D[0], &D[0]+100010, INF); D[src]=0LL; priority_queue, greater> Q; Q.push({0LL, src}); while(! Q.empty()){ auto [tm, cur] = Q.top(); Q.pop(); if (tm>D[cur]) continue; ll k = (tm+A[cur]-1)/A[cur]; if(k==0LL) k=1LL; ll add_time = 0LL; if (k%B[cur]==0) add_time=min(A[cur], C[cur]); for (auto [dst, t]: G[cur]){ if (k*A[cur]+t+add_time