我的代码交了好几次 为什么有时候RE 一两个 有时候CE 有时候AC 时
查看原帖
我的代码交了好几次 为什么有时候RE 一两个 有时候CE 有时候AC 时
279269
TORz3楼主2020/11/7 10:40
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
struct Edge{
	int to,w;
};

const int N = 2e5+ 10;
int n,m,st,x,y,w,dist[N],vis[N];
vector <Edge> g[N];
priority_queue < pair<int,int> > p;

void dijkstra(int st,int end);

int main(){
	//freopen("data.in","r",stdin);
	//freopen("data.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>n>>m>>st;
	for(int i=0;i<m;i++){
		cin>>x>>y>>w;
		g[x].push_back(Edge{y,w});
	}
	dijkstra(st,n);
	for(int i=1;i<=n;i++){
		if(dist[i] == 0x3f3f3f3f) cout<<(1<<31)-1<<" ";
		else cout<<dist[i]<<" ";
	}
	cout<<endl;
	return 0;
}

void dijkstra(int st,int end){
	memset(dist,0x3f,sizeof dist);
	memset(vis,0,sizeof vis);
	dist[st]=0;
	p.push( make_pair(0,st) );
	while(!p.empty()){
		int a=p.top().second;
		p.pop();
		if(vis[a])continue;
		vis[a]=1;
		int cnt=g[a].size();
		for(int i=0;i<cnt;i++){
			int yy=g[a][i].to,ww=g[a][i].w;
			if(dist[yy] > dist[a]+ww){
				dist[yy]=dist[a]+ww;
				p.push( make_pair(-dist[yy],yy) );
			}
		}
	}
}

求看

2020/11/7 10:40
加载中...