社区讨论
dijkstra无论怎么调都是20分,蒟蒻求助!
P3371【模板】单源最短路径(弱化版)参与者 6已保存回复 23
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 23 条
- 当前快照
- 1 份
- 快照标识符
- @mi6y3oql
- 此快照首次捕获于
- 2025/11/20 12:42 4 个月前
- 此快照最后确认于
- 2025/11/20 16:25 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
struct edge
{
int len,end,up;
}edge[500010];
int head[100010];
long long v[100010],dis[100010],minn;
int main()
{
int n,m,s,a,b,c,t;
long long inf;
inf=99999999999999;
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
cin>>a>>b>>c;
if(a==s) dis[b]=c;
if(head[a]==0) edge[i].up=0;
else edge[i].up=head[a];
head[a]=i;
edge[i].len=c;
edge[i].end=b;
}
for(int i=1;i<=n;i++)
{
if(dis[i]==0) dis[i]=inf;
}
dis[s]=0;
t=s;
while(1)
{
minn=inf;
for(int i=1;i<=n;i++)
{
if(dis[i]<minn && v[i]==0 && i!=s)
{
t=i;
minn=dis[i];
}
}
v[t]=1;
if(minn==inf) break;
for(int i=head[t];i!=0;i=edge[i].up)
{
if(dis[edge[i].end]>dis[t]+edge[i].len)
{
v[edge[i].end]=1;
dis[edge[i].end]=dis[t]+edge[i].len;
}
}
}
for(int i=1;i<=n;i++)
{
if(dis[i]==inf) cout<<"2147483647 ";
else cout<<dis[i]<<" ";
}
return 0;
}
回复
共 23 条回复,欢迎继续交流。
正在加载回复...