社区讨论
迪杰斯特拉最短路模版题求调
题目总版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lznwmkda
- 此快照首次捕获于
- 2024/08/10 16:59 2 年前
- 此快照最后确认于
- 2024/08/10 18:19 2 年前
网址:
https://deeplearning.org.cn/group/1138/training/1754/problem/P1513/full-screen
CPP#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <queue>
using namespace std;
int n,m,s,t,idx;
int dis[3000],vis[3000];
int e[15000],w[15000],h[15000],ne[15000];
struct node {
int x,d;
bool operator < (node p) const {
return d > p.d;
}
node(int x,int d):x(x),d(d) {}
};
inline int read() {
int date=0,w=1;
char c=getchar();
while(c<'0' || c>'9') {
if(c=='-') w=-1;
c=getchar();
}
while(c>='0' && c<='9') {
date=date*10+(c-'0');
c=getchar();
}
return date*w;
}
void add(int a,int b,int c) {
e[++idx]=b;
w[idx]=c;
ne[idx]=h[a];
h[a]=idx;
}
void dijkstra() {
memset(dis,0x7f,sizeof(dis));
priority_queue<node> q;
dis[s]=0;
node u(s,dis[s]);
q.push(u);
while(!q.empty()) {
node u=q.top();
q.pop();
if(vis[u.x]) continue;
vis[u.x]=1;
for(int i=h[u.x]; i; i=ne[i]) {
if(dis[e[i]] > dis[u.x] + w[i]) {
dis[e[i]] = dis[u.x] + w[i];
node v(e[i],dis[e[i]]);
q.push(v);
}
}
}
}
int main() {
n=read(),m=read(),s=read(),t=read();
for(int i=1; i<=m; i++) {
int a=read(),b=read(),c=read();
add(a,b,c);
add(b,a,c);
}
dijkstra();
cout<<dis[t];
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...