#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using db = double;
using ldb = long double;
using pii = pair<int, int>;
#define CI const int
#define mp make_pair
CI maxn=2e5+5;
struct node{
int u,to,val,p;
}e[maxn];
int cnt;
int in[maxn],out[maxn];
void add(int u,int v,int w,int p)
{
e[++cnt].to=v;
e[cnt].val=w;
e[cnt].p=p;
e[cnt].u=u;
}
int n,m,u,v,w,z;
vector<int> G[maxn];
CI inf=0x3f3f3f3f;
int ans[maxn];
bool cmp(node a,node b){return a.val>b.val;}
queue<int> q;
bool vis[maxn];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>u>>v>>w>>z;
add(u,v,w,z);
in[v]++,out[u]++;
}
memset(ans,0x3f,sizeof(ans));
sort(e+1,e+m+1,cmp);
for(int i=1;i<=m;i++)
{
int v=e[i].to;
G[v].push_back(i);
}
for(int i=1;i<=n;i++)if(!out[i])q.push(i);
for(int i=1;i<=m;i++)
{
int u=e[i].u,r=e[i].val;
if(vis[i])continue;
vis[i]=1;
ans[u]=min(ans[u],r);
out[u]--;
if(!out[u])q.push(u);
while(!q.empty())
{
int u=q.front();
q.pop();
for(auto ed:G[u])
{
if(vis[ed])continue;vis[ed]=1;
int ft=e[ed].u,fp=e[ed].p,fr=e[ed].val;
// cout<<ft<<' '<<fr<<' '<<fp<<' '<<ans[u]<<'\n';
if(ans[u]!=inf)
ans[ft]=min(ans[ft],max(fr,ans[u]-fp));
//cout<<ft<<' '<<ans[ft]<<'\n';
out[ft]--;
if(!out[ft])q.push(ft);
}
}
}
for(int i=1;i<=n;i++)
{
if(ans[i]==inf)cout<<"-1"<<' ';
else cout<<ans[i]<<' ';
}
return 0;
}
自认为写的比较清晰(