问题:此代码为什么绝对值就过了???
查看原帖
问题:此代码为什么绝对值就过了???
742571
deyerong楼主2022/10/6 21:54

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;
}

2022/10/6 21:54
加载中...