求不同数据范围的区别
查看原帖
求不同数据范围的区别
477258
charleshe楼主2022/4/20 16:45

RT,我开unsigned long longWA在第八个测试点,开了long long就过了?

另附ull和ll的代码:

ull(WA在第八个测试点):

#include <iostream>
#include <queue>
#include <vector>
#define int unsigned long long
#define MAXN 15001
#define INF 1e18
using namespace std;
struct edge{
	int v,w;
	edge(int a,int b){
		v=a;
		w=b;
	}
};
vector<edge> v[MAXN];
queue<int> q;
bool b[MAXN];
int n,m;
int dis[MAXN];
void spfa(){
	for(int i=1;i<=n;i++) dis[i]=INF;
	dis[1]=0;
	b[1]=1;
	q.push(1);
	while(!q.empty()){
		int p=q.front();
		q.pop();
		b[p]=0;
		for(int i=0;i<v[p].size();i++){
			int np=v[p][i].v;
			if(dis[np]>dis[p]+v[p][i].w){
				dis[np]=dis[p]+v[p][i].w;
				if(!b[np]){
					q.push(np);
				}
				b[np]=1;
			}
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u0,v0,w0;
		cin>>u0>>v0>>w0;
		v[u0].push_back(edge(v0,w0)); 
	}
	spfa();
	for(int i=1;i<=n;i++){
		if(dis[i]==INF) cout<<"-1 ";
		else cout<<dis[i]<<" ";
	}
	return 0;
}

ll(AC):

#include <iostream>
#include <queue>
#include <vector>
#define int long long
#define MAXN 15001
#define INF 1e18
using namespace std;
struct edge{
	int v,w;
	edge(int a,int b){
		v=a;
		w=b;
	}
};
vector<edge> v[MAXN];
queue<int> q;
bool b[MAXN];
int n,m;
int dis[MAXN];
void spfa(){
	for(int i=1;i<=n;i++) dis[i]=INF;
	dis[1]=0;
	b[1]=1;
	q.push(1);
	while(!q.empty()){
		int p=q.front();
		q.pop();
		b[p]=0;
		for(int i=0;i<v[p].size();i++){
			int np=v[p][i].v;
			if(dis[np]>dis[p]+v[p][i].w){
				dis[np]=dis[p]+v[p][i].w;
				if(!b[np]){
					q.push(np);
				}
				b[np]=1;
			}
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u0,v0,w0;
		cin>>u0>>v0>>w0;
		v[u0].push_back(edge(v0,w0)); 
	}
	spfa();
	for(int i=1;i<=n;i++){
		if(dis[i]==INF) cout<<"-1 ";
		else cout<<dis[i]<<" ";
	}
	return 0;
}
2022/4/20 16:45
加载中...