求助两个问题
查看原帖
求助两个问题
376158
YueQian_BXFZ楼主2022/9/12 14:21

情况:

问题1:Bellmanford算法第3个点WA(我知道这题Bellmanford和普通Dijkstra会超时,但我搞不懂为什么会有WA的情况)

问题2:Dijkstra在那本应该显示TLE的3个点上显示MLE,这是什么意思

代码1(Bellmanford):

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=10001;
const ll INF=1e9;
ll n,m,s,d[N];
vector<ll> to[N],w[N];
void Bellmanford(){
	fill(d,d+n+1,INF);
	d[s]=0;
	for(ll k=1;k<=n-1;k++)
		for(ll u=1;u<=n;u++)
			for(ll i=0;i<to[u].size();i++){
				ll v=to[u][i];
				ll cost=w[u][i];
				d[v]=min(d[v],d[u]+cost);
			}
}
int main(){
	scanf("%lld%lld%lld",&n,&m,&s);
	for(ll i=1;i<=m;i++){
		ll u,v,cost;
		scanf("%lld%lld%lld",&u,&v,&cost);
		to[u].push_back(v);
		w[u].push_back(cost);
	}
	Bellmanford();
	for(ll i=1;i<=n;i++)
		printf("%lld ",d[i]);
	return 0;
}

代码2:(Dijkstra)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=10001;
const ll INF=1e12;
ll n,m,s,d[N],w[N][N];
bool ok[N];
void Dijkstra(){
	fill(d,d+n+5,INF);
	d[s]=0;
	for(ll k=1;k<=n;k++){
		ll u=n+1;
		for(ll v=1;v<=n;v++)
			if(!ok[v]&&d[v]<d[u]) u=v;
		if(u==n+1) break;
		ok[u]=1;
		for(ll v=1;v<=n;v++)
			if(w[u][v]<INF)
				d[v]=min(d[v],d[u]+w[u][v]);
	}
}
int main(){
	scanf("%lld%lld%lld",&n,&m,&s);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			w[i][j]=INF;
	for(ll i=1;i<=m;i++){
		ll u,v,cost;
		scanf("%lld%lld%lld",&u,&v,&cost);
		w[u][v]=min(w[u][v],cost);
	}
	Dijkstra();
	for(ll i=1;i<=n;i++)
		d[i]<INF?printf("%lld ",d[i]):printf("2147483647 ");
	return 0;
}
2022/9/12 14:21
加载中...