真的只想说一点:细节!!!!!!delet的top--在哪写,还有down 里面的while(s<=top) 不要写成<=n!!!!!!! s<top不要写成 s<n
我调了一个上午while(s<top)调了将近两个小时,结果忘改后边那个,,又改了一个小时,心态炸了,怎么老犯sd错误
heap是权值,pn是head[x]中的x也就是点编号
inline void swp(int &x,int &y){x^=y,y^=x,x^=y;}
inline void up(int p)
{
while(p>1){
if(heap[p]<heap[p>>1]) swp(heap[p],heap[p>>1]),swp(pn[p],pn[p>>1]);
else break;
p>>=1;
}
}
inline void down(int p){
int s=(p<<1);
while(s<=top){
if(s<top&&heap[s]>heap[s+1]) ++s;
if(heap[s]<heap[p]) {swp(heap[s],heap[p]),swp(pn[s],pn[p]);}
else break;
p=s,s=(p<<1);
}
}
inline void insert(int x,int y){ heap[++top]=x,pn[top]=y,up(top); }
inline void delet(){ heap[1]=heap[top],pn[1]=pn[top--];down(1); }
inline void djs()
{
int x;
dis[num[