星星与辰 @ 2022-07-19 21:21:12
#include<bits/stdc++.h>
using namespace std;
typedef pair<long long,int> pii;
int head[100001],to[600001],nxt[600001],cnt;
long long w[600001],dis[100001];
bool vis[500001];
inline void add(int x,int y,long long z){
nxt[++cnt]=head[x];
head[x]=cnt;
to[cnt]=y;
w[cnt]=z;
}
priority_queue<pii,vector<pii>,greater<pii> >q;
int main(){
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
int x,y;
long long z;
for(int i=1;i<=m;++i){
scanf("%d%d%lld",&x,&y,&z);
add(x,y,z);
}
// for(int i=1;i<=k;++i){
// scanf("%d%lld",&x,&z);
// add(1,x,z);
// }
memset(dis,-1,sizeof(dis));
dis[1]=0;
q.push(make_pair(0,1));
while(!q.empty()){
pii k=q.top();
q.pop();
int u=k.second;
if(vis[u])continue;
vis[u]=true;
int i=head[u];
while(i){
if(dis[to[i]]>dis[u]+w[i]||dis[to[i]]==-1){
dis[to[i]]=dis[u]+w[i];
q.push(make_pair(dis[to[i]],to[i]));
}
i=nxt[i];
}
}
for(int i=1;i<=n;++i){
printf("%d ",dis[i]);
}
return 0;
}
by 星星与辰 @ 2022-07-19 21:21:47
这是我的代码,将1设为出发点,但是过了
by yinhee @ 2022-07-19 21:22:01
orz
by 星星与辰 @ 2022-07-19 21:22:04
所以s有什么用?
by char_cha_ch @ 2022-07-19 21:22:32
@星星与辰 这个问题好像也不大吧,都能练最短路
by stomfrom @ 2022-11-15 17:22:48
@星星与辰 这个是单源最短路,实际上无论是哪个点都是一样的