社区讨论
迪杰斯特拉求调,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 条回复,欢迎继续交流。
正在加载回复...