求助一道板子题
  • 板块学术版
  • 楼主X_Chao_Bai
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/11/5 23:42
  • 上次更新2023/11/5 08:51:57
查看原帖
求助一道板子题
241776
X_Chao_Bai楼主2020/11/5 23:42

P4779

这是dij的一道板子题,我感觉我这没啥问题啊,但是有几个点WA掉了。求助啊啊啊

#include<bits/stdc++.h>
#define N 200010
#define INF 0x7fffffff
using namespace std;
struct node{
	int k,s;
	bool operator <(const node &x)const{
        return x.s<s;
    }
};
struct Edge{
	int nxt,to;
};
vector<Edge> g[N];
priority_queue<node> q;
int dis[N];
int vis[N];
int n,m,p;
int main(){
	cin>>n>>m>>p;
	int u,v,w;
	while(m--){
		cin>>u>>v>>w;
		Edge x;
		x.to=w,x.nxt=v;
		g[u].push_back(x);
		x.to=w,x.nxt=u;
		g[v].push_back(x);
	}
	for(int i=0;i<N;++i)
		dis[i]=INF;
	dis[p]=0;
	q.push((node){p,0});
	while(!q.empty()){
		node x=q.top();
		q.pop();
		if(vis[x.k]) continue;
		vis[x.k]=1;
		int l=g[x.k].size();
		for(int i=0;i<l;++i){
			int y=g[x.k][i].nxt;
			int z=g[x.k][i].to;
			if(dis[y]>dis[x.k]+z){
				if(!vis[y])
					q.push((node){y,dis[x.k]+z});
				dis[y]=dis[x.k]+z;
			}
		}
	}
	for(int i=1;i<=n;++i)
		cout<<dis[i]<<" ";
	cout<<endl;
	return 0;
}

2020/11/5 23:42
加载中...