60分,求大佬求助
查看原帖
60分,求大佬求助
793071
JackyLi楼主2024/7/16 14:44
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int dis[maxn],head[maxn],n,m,s,cnt=0;
struct node{
	int to,dis,nex;
}edges[2*maxn];
struct edge{
	int to,dis;
	bool operator<(const edge &a)const{
		return dis>a.dis;
	}
};
void add(int from,int to,int dis){
	cnt++;
	edges[cnt].to=to;
	edges[cnt].dis=dis;
	edges[cnt].nex=head[from];
	head[from]=cnt;
}
priority_queue<edge> q;
void added(int x){
	for(int i=head[x];i!=0;i=edges[i].nex){
		if(dis[edges[i].to]||edges[i].to==s){
			continue;
		}
		q.push({edges[i].to,edges[i].dis+dis[x]});
	}
}
int main(){
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int u,v,m;
		cin>>u>>v>>m;
		add(u,v,m);
	}
	dis[s]=0;
	added(s);
	while(!q.empty()){
		auto tem=q.top();
		q.pop();
		if(dis[tem.to]){
			continue;
		}
		dis[tem.to]=tem.dis;
		added(tem.to);
	}
	for(int i=1;i<=n;i++){
		if(i==s){
			cout<<0<<" ";
		}
		else{
			cout<<dis[i]<<" ";
		}
	}
	return 0;
}

怎么把弱化版的提交上去只得WA了4个测试点??

2024/7/16 14:44
加载中...