#include using namespace std; #include using cpp_int=boost::multiprecision::cpp_int; cpp_int Biggcd(cpp_int x, cpp_int y){ if(y>0)return Biggcd(y,x%y); return x; } cpp_int Biglcm(cpp_int x, cpp_int y){ return x/Biggcd(x,y)*y; } struct edge{ int u,v,a,b; }; int main(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N,M; cin>>N>>M; vector edges(M); cpp_int l=1; for(int i=0;i>edges[i].u>>edges[i].v>>edges[i].a>>edges[i].b; edges[i].u--; edges[i].v--; l=Biglcm(edges[i].b,l); } vector>> G(N); cpp_int INF=1; for(int i=0;i, vector>, greater>> que; que.push({cpp_int(0),0}); vector ans(N, INF); ans[0]=0; while(!que.empty()){ auto [c,now]=que.top(); que.pop(); if(ans[now]ans[now]+cost){ ans[to]=ans[now]+cost; que.push({ans[to],to}); } } } for(int i=1;i