蒻芨求助!为什么dijstra+堆优化超时?
查看原帖
蒻芨求助!为什么dijstra+堆优化超时?
680048
kxr_楼主2023/3/13 22:08
#include<bits/stdc++.h>
//#include<queue>				//priority_queue<pair<int,int> >q需要 
using namespace std;
const int N=1e5+1000,M=2e5+1000,INF=0x3f3f3f3f;
int n,m,tot,st;
int dis[N];
int first[N],nex[M],to[M],w[M];
bool vis[N];
priority_queue<pair<int,int> >q;		
void add(int x,int y,int z){		
	nex[++tot]=first[x];
	first[x]=tot;
	to[tot]=y;
	w[tot]=z;
}
void dijstra(){
	memset(dis,INF,sizeof(dis));
	memset(vis,0,sizeof(vis));
	dis[st]=0;						
	q.push(make_pair(0,st));		
	while(!q.empty()){					
		int u=q.top().second;			
		q.pop();
		if(vis[u]){
			continue;					
		}
		vis[u]=1;
		for(int e=first[u];e;e=nex[e]){	
			int v=to[e];			
			if(dis[u]+w[e]<dis[v]){
				dis[v]=dis[u]+w[e];	
				q.push(make_pair(-dis[v],v));
			}
		}
	}
}
int main(){
	cin>>n>>m>>st;
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);						
		add(y,x,z);						
	}
	dijstra();
	for(int i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	return 0;
}
2023/3/13 22:08
加载中...