怎么把我卡掉的
#include<bits/stdc++.h>
#define int long long
#define inf 0x3f3f3f3f3f3f
using namespace std;
int n,m,x,y,z,vis[100100],dis[100100],h[100100],l,cnt[100100],p[100100];
struct edge
{
int v,w,next,u;
}e[500100];
struct node
{
int dis,pos;
bool operator <(const node &x)const
{
return x.dis<dis;
}
};
inline int read()
{
int k=0,f=0;char c=getchar();
for(;!isdigit(c);c=getchar()) f|=c=='-';
for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48);
return f?-k:k;
}
inline void add(int x,int y,int z)
{
e[++l].v=y;
e[l].u=x;
e[l].w=z;
e[l].next=h[x];
h[x]=l;
}
inline bool spfa(int s)
{
for(int i=0;i<=n;i++) p[i]=inf;
p[s]=0;
queue<int>q;
q.push(s);
vis[s]=1;
cnt[s]++;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=h[u];i;i=e[i].next)
{
if(p[e[i].v]>p[u]+e[i].w)
{
p[e[i].v]=p[u]+e[i].w;
if(!vis[e[i].v])
{
q.push(e[i].v);
cnt[e[i].v]++;
if(cnt[e[i].v]>=n) return 1;
vis[e[i].v]=1;
}
}
}
}
return 0;
}
inline void dij(int s)
{
for(int i=1;i<=n;i++) dis[i]=inf,vis[i]=0;
priority_queue<node> q;
dis[s]=0;
q.push((node){0,s});
while(!q.empty())
{
node t=q.top();
q.pop();
int k=t.pos;
if(vis[k]) continue;
vis[k]=1;
for(int i=h[k];i;i=e[i].next)
{
if(dis[e[i].v]>dis[k]+e[i].w)
{
dis[e[i].v]=dis[k]+e[i].w;
if(!vis[e[i].v]) q.push((node){dis[e[i].v],e[i].v});
}
}
}
}
signed main()
{
n=read(),m=read();
for(int i=1;i<=m;i++)
{
x=read(),y=read(),z=read();
add(x,y,z);
}
for(int i=1;i<=n;i++) add(0,i,0);
if(spfa(0))
{
printf("-1");
return 0;
}
for(int i=1;i<=l;i++) e[i].w+=p[e[i].u]-p[e[i].v];
for(int i=1;i<=n;i++)
{
int ans=0;
dij(i);
for(int j=1;j<=n;j++)
{
if(dis[j]==inf) ans+=j*1000000000;
else ans+=j*(dis[j]+p[j]-p[i]);
}
printf("%lld\n",ans);
}
return 0;
}