社区讨论
简单dij查了一晚上,崩溃了都
P3371【模板】单源最短路径(弱化版)参与者 5已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @mi7yr6i5
- 此快照首次捕获于
- 2025/11/21 05:48 4 个月前
- 此快照最后确认于
- 2025/11/21 05:48 4 个月前
最基础的边表无优化,样例过了测试全wa
查了一晚上,救救孩子
CPP#include<bits/stdc++.h>
using namespace std;
const int maxn=10003,maxm=500003;
int n,m,s;
struct edge{
int p,w;
};
vector<edge> a[maxn];
int d[maxn];bool v[maxn];
void dijk(int s){
memset(v,true,sizeof(v));
for(int i=0;i<a[s].size();i++)
d[a[s][i].p]=a[s][i].w;
d[s]=0;
v[s]=false;
for(int i=1;i<=n-1;i++){
//system("pause");
int k,min=999999;
for(int j=1;j<=n;j++)
if(v[j] && d[j]<min)
min=d[j],k=j;
//cout<<k<<' ';
v[k]=false;
for(int j=0;j<a[k].size();j++){//a[k][j].p
if(v[a[k][j].p] && d[k]+a[k][j].w<d[a[k][j].p]){
d[a[k][j].p]=d[k]+a[k][j].w;
//cout<<"d[k]="<<d[k]<<' '<<"a[k][j]="<<a[k][j].w<<endl;
//printf("to %d min=%d\n",a[k][j].p,a[k][j].w+d[k]);
//system("pause");
}
}
}
}
int main(){
cin>>n>>m>>s;
int x,y,w;
for(int i=1;i<=m;i++){
edge e;//creat edges
cin>>x>>e.p>>e.w;
a[x].push_back(e);
}
dijk(s);
for(int i=1;i<=n;i++)
cout<<d[i]<<' ';
return 0;
}
谢谢大神指点迷津
回复
共 10 条回复,欢迎继续交流。
正在加载回复...