为啥差分约束过不了啊???
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,int> pii;
const int N=1e6+10,M=1e6+10;
int n,m,x1,a[N],b[N],tot,h[N],ne[M],e[M],idx;
ll dis[N],w[M];
vector<int>in[N],out[N];
bool vis[N];
inline void add(int u,int v,ll x){
// cout<<u<<" "<<v<<" "<<x<<"\n";
ne[++idx]=h[u],h[u]=idx,e[idx]=v,w[idx]=x;
}
inline void dij(){
memset(dis,-0x3f,sizeof dis);
dis[0]=0;
priority_queue<pii>q;
q.push({0,0});
while(!q.empty()){
int u=q.top().second;
q.pop();
if(vis[u]) continue;
vis[u]=1;
for(int i=h[u];i;i=ne[i]){
int v=e[i];
ll tmp=dis[u]+w[i];
if(tmp>dis[v]) q.push({dis[v]=tmp,v});
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&x1);
for(int i=1,x,y;i<=m;++i){
scanf("%d%d%d%d",&x,&y,&a[i],&b[i]);
in[x].push_back(i);
out[y].push_back(i);
}
tot=m;
for(int i=1;i<=n;++i){
sort(in[i].begin(),in[i].end(),[&](int x,int y){return a[x]>a[y];});
// cout<<i<<"---\n";
int la=0,ts=tot;
for(int j:in[i]){
++tot;
add(tot,j,-a[j]);
if(la) add(tot,la,0);
la=tot;
}
for(int j:out[i]){
int l=0,r=(int)in[i].size()-1,p=-1;
while(l<=r){
int mid=l+r>>1;
if(a[in[i][mid]]>=b[j]) l=mid+1,p=mid;
else r=mid-1;
}
// cout<<j<<" "<<p<<"==\n";
if(~p){
add(j,ts+p+1,b[j]);
}
}
}
add(0,1,x1),add(1,0,-x1);
for(int i=2;i<=m;++i) add(0,i,0);
dij();
for(int i=2;i<=m;++i) printf("%lld ",dis[i]);
return 0;
}