社区讨论

迪杰斯特拉求调,P4779标准版已过,弱化版WA#2#9#10

P3371【模板】单源最短路径(弱化版)参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lwvycfpl
此快照首次捕获于
2024/06/01 18:10
2 年前
此快照最后确认于
2024/06/01 20:16
2 年前
查看原帖
代码如下:
CPP
#include <bits/stdc++.h>
using namespace std;
long long n,m,s,id[500000],ans[500000];

struct T{
	long long you,quan;
};

vector <T> q[500005];

bool operator<(T x,T y){
	return x.quan>y.quan;
}

priority_queue <T> p;

int main(){
    long long MA=99999999999;
//	freopen("P4779_1.in","r",stdin);
//	freopen("1.txt","w",stdout);
	cin >>n>>m>>s;
	for(long long i=1;i<=n;i++){
		ans[i]=MA;
	}
	for(long long i=1;i<=m;i++){
		long long u,v,w;
		cin >>u>>v>>w;
		q[u].push_back((T){v,w});
		id[i]=0;
	}
	p.push((T){s,0});
	ans[s]=0;
//	id[s]=1;
//	long long pd=1;
	while(p.empty()==0){
		T d=p.top();
		long long dd=d.you;
		long long ddd=d.quan;
		p.pop();
		if(id[dd]==1){
//			pd++;
			continue;
		}
		id[dd]=1;
		for(long long i=0;i<q[dd].size();i++){
			long long q1=q[dd][i].you;
			long long q2=q[dd][i].quan;
			if(ans[q1]>ans[dd]+q2){
				ans[q1]=ans[dd]+q2;
//				if(id[q1]!=1){
					p.push((T){q1,ans[q1]});
//				}
			}
		}
	}
	ans[s]=0;
	for(long long i=1;i<=n;i++){
        if(ans[i]==MA){
            cout <<"2147483647 ";
            continue;
        }
		cout <<ans[i]<<" ";
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...