双倍经验求助
查看原帖
双倍经验求助
537546
whitrice楼主2023/4/1 11:18

rt,A了这道题的标准版,但是到这里就只有90分了,不知道怎么改,大佬求调

代码:

#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;
} 
2023/4/1 11:18
加载中...