堆优板子求助
查看原帖
堆优板子求助
763542
Furina_Hate_Comma楼主2023/3/9 22:31
#include<bits/stdc++.h>
using namespace std;
struct lsqxx{
	int nxt,to,from,value;
	lsqxx(){
		value=114514;
	} 
}e[114514];int tail=0;
int num[114514],ans[114514];
void addedge(int f,int t,int v){
	e[++tail].from=f;
	e[tail].nxt=num[f];
	e[tail].value=v;
	e[tail].to=t;
	num[f]=tail;
}
bool check[114514];
priority_queue<pair<int,int> >q;
int main(){
	int n,m,s;
	cin>>n>>m>>s;
	memset(num,-1,sizeof num);
	for(int i=1;i<=m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		addedge(a,b,c);
	}
	q.push(make_pair(0,s));
	while(!q.empty()){
		int k=q.top().second;
		check[k]=1;
		ans[k]=q.top().first;
		q.pop();
		for(int i=num[k];i!=-1;i=e[i].nxt){
			if(!check[e[i].to]){
				if(ans[k]+e[i].value<ans[e[i].to]){
					ans[e[i].to]=ans[k]+e[i].value;
					q.push(make_pair(ans[e[i].to],e[i].to));
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
		cout<<ans[i]<<" ";
}

样例输出0 0 0 0

2023/3/9 22:31
加载中...