社区讨论

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 条回复,欢迎继续交流。

正在加载回复...