洛谷p2483 模板k短路 可持久化可並堆

2022-09-04 04:09:06 字數 1346 閱讀 6666

俞鼎力大牛:堆得可持久化

直接上**?

#include#define eps 1e-8

using

namespace

std;

int head[10005],cnt=-1,v[10005],rt[10005],mark[1000005],ans,fa[10005

];int

n,m,tot;

double se,dis[10100

];priority_queue

double,int > >q;//

這裡注意,是double ,int

struct

heaptr[30000010

];struct

nodee[

10000010

];void add(int

from,int to,double

w)int merge(int x,int

y)void

dijkstra()}}

}}//

djk跑一遍從終點反向往回走的最短路樹

void dfs(int

from

) }

}}//

標記一下最短路樹上有哪些邊

int newnode(double w,int

to)int

main()

dijkstra();

memset(v,

0,sizeof

v); dfs(n);

for(int i=0;i<=cnt;i+=2

) }

//把不在最短路樹上的路徑加入堆;

//權值是"走不在最短路樹上的邊的路徑長度與最短路的路徑長度的差值"

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

//把在最短路樹上的路徑加入堆

if(dis[1]-se1],ans++; //

走最短路的情況

if(rt[1])q.push(make_pair(-tr[rt[1]].w,rt[1]));//

假如rt[1]沒有說明從n根本到不了1

while(!q.empty())//

把左兒子和右兒子加入優先佇列,因為是小根堆 ,所以這樣加肯定是從小到大的;

if(rt[tr[from].to])q.push(make_pair(cur-tr[rt[tr[from].to]].w,rt[tr[from].to])); //

加to對應的新的堆的路徑;

} printf(

"%d\n

",ans);

}

洛谷P3919 模板 可持久化陣列

題目大意 有兩個操作,1 在第x次操作後的版本上修改乙個值,2 查詢在第x次操作後的版本上的乙個節點的值 即 你需要維護這樣的乙個長度為n的陣列,支援如下幾種操作 1.在某個歷史版本上修改某乙個位置上的值 2.訪問某個歷史版本上的某一位置的值 此外,每進行一次操作 對於操作2,即為生成乙個完全一樣的...

洛谷P3835 模板 可持久化平衡樹

本題為題目 普通平衡樹 的可持久化加強版。資料已經經過強化 插入x數 刪除x數 若有多個相同的數,因只刪除乙個,如果沒有請忽略該操作 查詢x數的排名 排名定義為比當前數小的數的個數 1。若有多個相同的數,因輸出最小的排名 查詢排名為x的數 求x的前驅 前驅定義為小於x,且最大的數,如不存在輸出 21...

洛谷 P3835 模板 可持久化平衡樹

可持久化平衡樹 可持久化 treap 1.插入 x 2.刪除 x 3.查詢 x 的排名 4.查詢排名為 x 的數 5.求 x 的前驅 6.求 x 的後繼 每次操作都基於某一歷史版本,同時生成乙個新的版本 include include include define maxn 500010 using...