dijkstra模板超时求助
  • 板块学术版
  • 楼主南瓜桐
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/2/19 13:36
  • 上次更新2023/10/28 08:11:50
查看原帖
dijkstra模板超时求助
439327
南瓜桐楼主2022/2/19 13:36
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
priority_queue <pair<int,int> >q;
vector <int>d,dis,to,nxt,head;
vector <bool>vis;
const int inf = 1e9 + 1;
int n,m,s;
void my_add(int u,int v,int w){
	dis.push_back(w);
	to.push_back(v);
	nxt.push_back(head[u]);
	head[u] = nxt.size() - 1;
	return;
}
void dijkstra(){
	d[s] = 0;
	q.push(make_pair(0,s));
	while(q.size()){
		int x = q.top().second;q.pop();
		if(vis[x] == true)continue;
		for(int i = head[x]; i != -1; i = nxt[i]){
			int y = to[i];
			int z = dis[i];
			if(d[y] > d[x] + z){
				d[y] = d[x] + z;
				q.push(make_pair(-d[y],y));
			}
		}
		
	}
	return;
}
int main(){
	cin>>n>>m>>s;
	head.resize(n+1,-1);
	d.resize(n+1,inf);
	vis.resize(n+1,false);
	
	for(int i = 1; i <= m; ++i){
		int u,v,w;
		cin>>u>>v>>w;
		my_add(u,v,w);
	}
	
	
	dijkstra();
	
	for(int i = 1; i <= n; ++i){
		if(d[i] == inf){
			cout<<2147483647<<' ';
		}else{
			cout<<d[i]<<' ';
		}
	}
	return 0;
} 

题目:P4779

2022/2/19 13:36
加载中...