刚学dijkstra,求找虫子qwq
查看原帖
刚学dijkstra,求找虫子qwq
93731
闻染楼主2020/11/4 21:47
#include <bits/stdc++.h>
using namespace std;

#define RE register
#define maxn 10005

priority_queue<pair<int,int> >q;

struct Edge
{
    int u,v,w,next;
}edge[500005];

int head[maxn],cnt,n,m,s,u,vi,v[maxn],d[maxn],w;

inline void add(int u,int v,int w){
	edge[++cnt].u=u;
	edge[cnt].w=w;
	edge[cnt].v=v;
	edge[cnt].next=head[u];
	head[u]=cnt;
}

inline dij(){
	memset(d,0x3f,sizeof(d));
	memset(v,0,sizeof(v));
	d[s]=0;
	q.push(make_pair(0,s));
	while(q.size()){
		int x=q.top().second;
		q.pop();
		if(v[x])continue;
		v[x]=1;
		for(RE int i=head[x];i;i=edge[i].next){
			int v=edge[i].v;
			if(d[v]>d[x]+edge[i].w){
				d[v]=d[x]+edge[i].w;
				q.push(make_pair(-d[v],v));
			}
		}
	}
}

inline void fread(int &x){
	x=0;
	int f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	} 
	x*=f;
}

int main(){
	fread(n);
	fread(m);
	fread(s);
	for(RE int i=1;i<=m;i++){
		fread(u);
		fread(vi);
		fread(w);
		add(u,vi,w);
	}
	for(RE int i=1;i<=n;i++)printf("%d ",d[i]);
	return 0;
} 
2020/11/4 21:47
加载中...