社区讨论
双倍经验求助
P3371【模板】单源最短路径(弱化版)参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo2u70az
- 此快照首次捕获于
- 2023/10/23 19:51 2 年前
- 此快照最后确认于
- 2023/10/23 19:51 2 年前
rt,A了这道题的标准版,但是到这里就只有90分了,不知道怎么改,大佬求调
代码:
CPP#include<bits/stdc++.h>
using namespace std;
int n,m,s,cnt,head[1000005],dis[1000005],vis[1000005],a,b,c;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
struct node{
int v,w,nxt;
}e[1000005];
void u(int u,int v,int w){
e[++cnt].v = v;
e[cnt].w = w;
e[cnt].nxt = head[u];
head[u] = cnt;
}
void dijkstra(){
memset(dis,0x3f3f3f3f,sizeof(dis));
dis[s]=0;
q.push(make_pair(0,s));
while(!q.empty()){
int x=q.top().second;
q.pop();
if(vis[x]){
continue;
}
vis[x]=1;
for(int i = head[x];i;i = e[i].nxt)
{
int v = e[i].v;
int w = e[i].w;
if(dis[v] > dis[x] + w)
{
dis[v] = dis[x] + w;
q.push(make_pair(dis[v],v));
}
}
}
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
u(a,b,c);
}
dijkstra();
for(int i=1;i<=n;i++){
cout<<dis[i]<<" ";
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...