为什么#define INF 1000000000 过不了
查看原帖
为什么#define INF 1000000000 过不了
157752
yxr_楼主2021/3/24 17:29
#include<bits/stdc++.h>
#define maxn 7020
#define ll long long
#define INF 1e9
#define maxnn 102000

using namespace std;

struct node {
	ll x,w;
	node(ll a=0,ll b=0) {
		x=a;
		w=b;
	}
};

vector<pair<ll,ll> > v[maxnn];
priority_queue<node> pq;

bool operator < (const node &a,const node &b) {
	return a.w >b.w ;
}

ll dis[maxnn];
ll n,m;
ll h[maxnn];
ll vis[maxnn];

void add(ll a,ll b,ll c) {
	v[a].push_back(make_pair(b,c));
}

bool spfa(ll s) {
	ll t[maxnn];
	memset(t,0,sizeof(t));
	queue<ll> q;
	memset(h,0x3f,sizeof(h));
	h[s]=0;
	vis[s]=1;
	q.push(s);
	while(!q.empty()) {
		ll x=q.front();
		q.pop();
		vis[x]=0;
		for(int i=0; i<v[x].size(); i++) {
			ll u=v[x][i].first;
			ll w=v[x][i].second;
			if(h[u]>h[x]+w) {
				h[u]=h[x]+w;
				if(!vis[u]) {
					vis[u]=1;
					q.push(u);
					t[u]++;
					if(t[u]==n+1) return false;
				}
			}
		}
	}

	return true;

}

void dij(int s) {
//	memset(dis,0x3f,sizeof(dis));
for(int i=1; i<=n; i++) dis[i]=INF;
	memset(vis,0,sizeof(vis));

	dis[s]=0;
	pq.push(node(s,dis[s]));
	while(!pq.empty()) {
		ll x=pq.top().x;
		pq.pop();
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=0; i<v[x].size(); i++) {
			ll y=v[x][i].first;
			ll w=v[x][i].second;
			if(dis[y]>dis[x]+w) {
				dis[y]=dis[x]+w;
				if(!vis[y])
					pq.push(node(y,dis[y]));
			}
		}
	}

	/*ll ans=0;
	for(int i=1; i<=n; i++) {
		if(dis[i]==0x3f) dis[i]=1000000000;
		if(i==s) dis[i]=0;
		ans+=i*dis[i];
	}
	return ans;*/
	return;
}

int main() {
	cin>>n>>m;
	for(int i=1; i<=m; i++) {
		ll a,b,c;
		cin>>a>>b>>c;
		add(a,b,c);
	}

	for(int i=1; i<=n; i++) {
		add((ll)0,(ll)i,(ll)0);
	}

	if(!spfa(0)) {
		cout<<-1<<'\n';
		return 0;
	}

	for(int i=1; i<=n; i++) {
		for(int j=0; j<v[i].size(); j++) {
			v[i][j].second+=h[i]-h[v[i][j].first];
		}
	}
	for(int i=1; i<=n; i++) {
		dij(i);
		ll ans=0;
		for(int j=1; j<=n; j++) {
			if(dis[j]==INF) ans+=j*INF;
			else ans+=j*(dis[j]+h[j]-h[i]);
		}
		cout<<ans<<'\n';
	}

	return 0;


}

这个是错误代码,当时找了很长时间bug,但是发现最后把INF=1000000000 改成 INF=1e9就过了,哪位神仙能帮忙解释一下?(* ╹▽╹ *)

2021/3/24 17:29
加载中...