WA
查看原帖
WA
297831
idgg007楼主2020/7/11 12:26

记录 代码:

#include<iostream>
using namespace std;
struct node{
	int Id,Dis;
}Heap[1000005];
struct edge{
	int Next,To,Dis;
}Edge[1000005];
int Dis[1000005],Vis[1000005],N,M,Start,Heap_Size,Head[1000005],Cnt;
void Add_Edge(int From,int To,int D){
	Edge[++Cnt].Next=Head[From];
	Edge[Cnt].To=To;
	Edge[Cnt].Dis=D;
	Head[From]=Cnt;
}
void Add_Heap(node X){
	Heap[++Heap_Size]=X;
	int i=Heap_Size;
	while(Heap[i].Dis<Heap[i/2].Dis){swap(Heap[i],Heap[i/2]);i/=2;}
	return;
}
void Del_Heap(int X){
	Heap[X]=Heap[Heap_Size--];
	while(X*2<Heap_Size){
		int i=X*2;
		if(Heap[i].Dis>Heap[i+1].Dis)	i++;
		if(Heap[i].Dis<Heap[X].Dis){swap(Heap[i],Heap[X]);X=i;}
		else return;
	}
}void Dijkstra(int S){
	for(int i=0;i<=N;i++)	Dis[i]=2100000000;
	Dis[S]=0;
	Add_Heap(node{S,0});
	while(Heap_Size){
		int l=Heap[1].Id;
		Del_Heap(1);
		if(Vis[l])	continue;
		Vis[l]=1;
		for(int i=Head[l];i;i=Edge[i].Next)
			if(Dis[Edge[i].To]>Dis[l]+Edge[i].Dis){Dis[Edge[i].To]=Dis[l]+Edge[i].Dis;Add_Heap(node{Edge[i].To,Dis[Edge[i].To]});}
	}
}
int main(){
	cin>>N>>M>>Start;
	for(int i=0,x,y,z;i<M;i++){cin>>x>>y>>z;Add_Edge(x,y,z);}
	Dijkstra(Start);
	for(int i=1;i<=N;i++)	cout<<Dis[i]<<" ";
	return 0;
}

手动堆

当我看到记录:

line 1 column 1951

麻烦大佬们找一下错

2020/7/11 12:26
加载中...