社区讨论

双倍经验求助

P3371【模板】单源最短路径(弱化版)参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo2u70az
此快照首次捕获于
2023/10/23 19:51
2 年前
此快照最后确认于
2023/10/23 19:51
2 年前
查看原帖
rt,A了这道题的标准版,但是到这里就只有90分了,不知道怎么改,大佬求调
代码:
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,s,cnt,head[1000005],dis[1000005],vis[1000005],a,b,c;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
struct node{
	int v,w,nxt;
}e[1000005];
void u(int u,int v,int w){
	e[++cnt].v = v;
	e[cnt].w = w;
	e[cnt].nxt = head[u];
	head[u] = cnt;
}
void dijkstra(){
	memset(dis,0x3f3f3f3f,sizeof(dis));
	dis[s]=0;
	q.push(make_pair(0,s));
	while(!q.empty()){
		int x=q.top().second;
		q.pop();
		if(vis[x]){
			continue;
		}
		vis[x]=1;
		for(int i = head[x];i;i = e[i].nxt)
		{
			int v = e[i].v;
			int w = e[i].w;
			if(dis[v] > dis[x] + w)
			{
				dis[v] = dis[x] + w;
				q.push(make_pair(dis[v],v));
			}
		}
	}
}
int main(){
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		u(a,b,c);
	}
	dijkstra();
	for(int i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	return 0;
} 

回复

4 条回复,欢迎继续交流。

正在加载回复...