dij求调!!!(玄关
  • 板块学术版
  • 楼主zhuoheng
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/12/3 15:29
  • 上次更新2023/12/3 17:31:33
查看原帖
dij求调!!!(玄关
1023698
zhuoheng楼主2023/12/3 15:29
#include<bits/stdc++.h>
using namespace std;
const int N=100001;
int n,m,s,obj,pre[N];
bool vis[N];
int dis[N];
struct node{
	int u,v,w;
	node(){u=v=w=0;}
	friend bool operator  < (node a,node b){return a.w>=b.w;}
};
priority_queue<node>q;
vector<node>g[N];
void dj(int be){
	vis[be]=1,dis[be]=0;
	node tp;
	tp.u=tp.v=be,
	q.push(tp);//压入 
	while(!q.empty()){
		tp=q.top(),q.pop();//min 
		int b=tp.v;
		if(!vis[b]){
			vis[b]=1;
			//维护b的邻接点的dis
			for(int i=0;i<g[b].size()/*长度*/;i++){
				int value=dis[b]+g[b][i].w;
				if(value<dis[g[b][i].v]){
					dis[g[b][i].v]=value;
					tp.u=b,tp.v=g[b][i].v,tp.w=dis[g[b][i].v];
					q.push(tp);
				}
			}
		}
	}
	
}
int main(){
    cin>>n>>m>>s;
    for(int i=1;i<=n;i++)dis[i]=(1ll<<31)-1,pre[i]=i;
    while(m--){
		node tp;
    	cin>>tp.u>>tp.v>>tp.w;
    	g[tp.u].push_back(tp);
	}
	dj(s);
	for(int i=1;i<=n;i++)cout<<dis[i]<<" ";
}
2023/12/3 15:29
加载中...