社区讨论
0分求调必关
P1339[USACO09OCT] Heat Wave G参与者 3已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mhjdsmm3
- 此快照首次捕获于
- 2025/11/04 00:55 4 个月前
- 此快照最后确认于
- 2025/11/04 00:55 4 个月前
CPP
#include<bits/stdc++.h>
#define N 100010
#define M 200010
using namespace std;
struct edge{
int to;
int next;
int dis;
};
struct node{
int dis;
int pos;
bool operator <(const node&x)const{
return x.dis<dis;
}
};
priority_queue<node> p;
edge e[M];
int head[N];
int dis[N];
int cnt;
bool vis[N];
int n,m,s;
void add_edge(int u,int v,int d){
cnt++;
e[cnt].dis=d;
e[cnt].to=v;
e[cnt].next=head[u];
head[u]=cnt;
}
void djst(){
dis[s]=0;
p.push((node){0,s});
while(!p.empty()){
node tmp=p.top();
p.pop();
int x=tmp.pos;
int d=tmp.dis;
if(vis[x])continue;
vis[x]=1;
for(int i=head[x];i;i=e[i].next){
int y=e[i].to;
if(dis[y]>dis[x]+e[i].dis){
dis[y]=dis[x]+e[i].dis;
if(!vis[y])
p.push((node){dis[y],y});
}
}
}
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=n;i++)dis[i]=0x7fffffff;
for(int i=1;i<=m;i++){
int u,v,d;
cin>>u>>v>>d;
add_edge(u,v,d);
}
djst();
for(int i=1;i<=n;i++)cout<<dis[i]<<" ";
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...