一个MLE,一个WA,求改
查看原帖
一个MLE,一个WA,求改
836448
stylus楼主2024/1/24 09:00

第一个(这个其实能过,但MLE了:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,h;
};
bool operator <(node a,node b){
    return a.h>b.h;
}
int n,m,s,a[10001][10001],d[10001],u,v,w;
void bfs(){
	priority_queue<node>q;
	q.push({s,0}),d[s]=0;
	while(q.size()){
		node s=q.top();
		q.pop();
		for(int i=1;i<=n;i++){
			if(a[s.x][i]==-1)continue;
			if(d[i]>d[s.x]+a[s.x][i])d[i]=d[s.x]+a[s.x][i],q.push({i,d[i]});
		}
	}for(int i=1;i<=n;i++)cout<<d[i]<<' ';
	return;
}
int main(){
	memset(a,-1,sizeof(a)),memset(d,114514,sizeof(d));
	cin>>n>>m>>s;
	for(int i=0;i<m;i++)cin>>u>>v>>w,a[u][v]=w;
	bfs();
	return 0;
}

然后我又改了一下(却错了:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,h;
};
bool operator <(node a,node b){
    return a.h>b.h;
}
int n,m,s,d[10001],u,v,w;
map<pair<int,int>,int>mp;
void bfs(){
	priority_queue<node>q;
	q.push({s,0}),d[s]=0;
	while(q.size()){
		node s=q.top();
		q.pop();
		for(int i=1;i<=n;i++){
			if(mp[{s.x,i}]==-1)continue;
			if(d[i]>d[s.x]+mp[{s.x,i}])d[i]=d[s.x]+mp[{s.x,i}],q.push({i,d[i]});
		}
	}for(int i=1;i<=n;i++)cout<<d[i]<<' ';
	return;
}
void init(){
	memset(d,114514,sizeof(d));
	mp.clear();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j)mp[{i,j}]=-1;
		}
	}return;
}
int main(){
	init();
	cin>>n>>m>>s;
	for(int i=0;i<m;i++)cin>>u>>v>>w,mp[{u,v}]=w;
	bfs();
	return 0;
}

求大佬改正!!!

2024/1/24 09:00
加载中...