社区讨论
标准版Ac,弱化70WAWAWA求调
P3371【模板】单源最短路径(弱化版)参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lyqowez3
- 此快照首次捕获于
- 2024/07/18 11:06 2 年前
- 此快照最后确认于
- 2024/07/18 11:48 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
#define INF 2147483647
#define int long long
int n,m,s,u,v,w;
int cnt,head[100005];
int dist[100005],vis[100005];
struct Edge{
int to,dis,next;
}edge[200005];
void Add_edge(int from,int to,int w)
{
edge[++cnt].to=to;
edge[cnt].dis=w;
edge[cnt].next=head[from];
head[from]=cnt;
}
struct node{
int id,dis;
bool operator < (const node &a)const{ return a.dis<dis;}
};
void Dijkstra()
{
priority_queue<node> q;
q.push(node {s,0});
for(int i=1;i<=n;i++) dist[i]=INF;
dist[s]=0;
while(!q.empty())
{
node a=q.top();q.pop();
int now=a.id;
if(vis[now]) continue;
vis[now]=1;
for(int i=head[now];i;i=edge[i].next)
{
int j=edge[i].to;
if(dist[now]+edge[i].dis<dist[j]){
dist[j]=dist[now]+edge[i].dis;
q.push(node{j,dist[j]});
}
}
}
}
signed main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
Add_edge(u,v,w);
}
Dijkstra();
for(int i=1;i<=n;i++){
if(s==i) cout<<0<<" ";
else cout<<dist[i]<<" ";
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...