QwQ 问题:为什么我输出时abs()正数就过了,不加就不过QwQ
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,dis[500000],sum[500000];
bool vis[500000];
queue<int >q;
vector<pair<int ,int >>in[500000];
inline int read() {
char c = getchar();
int x = 0, f = 1;
for (; !isdigit(c); c = getchar())
if (c == '-') f = -1;
for (; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
return x * f;
}
inline bool spfa(int s){
for(register int i=1;i<=n;i++){dis[i]=1e9;}
for(register int i=1;i<=n;i++){
q.push(i);vis[i]=1;sum[i]++;
}
dis[s]=0;vis[s]=1;
q.push(s);
while(q.size()){
int now=q.front();q.pop();
vis[now]=0;
for( pair<int ,int > v : in[now]){
if (dis[now]+v.second<dis[v.first]){
dis[v.first]=dis[now]+v.second;
if (!vis[v.first]){
vis[v.first]=1;sum[v.first]++;
if(sum[v.first]>n+1)return 0;
q.push(v.first);
}
}
}
}
return 1;
}
int main() {
// freopen("in.txt","r",stdin);
n=read(),m=read();
int x,y,v;
for(register int i=1;i<=n;i++){in[0].push_back({i,0});}
for(register int i=1;i<=m;i++){
x=read(),y=read(),v=read();
in[x].push_back({y,v});
}
if (!spfa(0))cout<<"NO"<<"\n";
else {
for(register int i=1;i<=n;i++){
///////////////////////////////////////
printf("%d ",abs(dis[i]));//这一行
///////////////////////////////////////
}
}
return 0;
}