HDU 6604 支配樹上倍增

2021-10-03 05:01:56 字數 1320 閱讀 6063

因為可能有多個重要城市,所以我們建立乙個虛擬節點s。

只要我們理解支配樹的含義,那麼對於兩個點的時候也是一樣的。

所以問題變為s不能到達這兩個點,需要炸掉的城市個數。可以看出這裡需要建反圖。

那麼不能到達兩個點實際在支配樹上面是什麼呢?就是s到這兩個點的個數之和,這裡樹上倍增即可求出。

但是要注意,s不能炸掉,所以答案要減一。

ac**:

#pragma gcc optimize("-ofast","-funroll-all-loops")

#include

//#define int long long

using namespace std;

const

int n=

2e5+

10,m=n<<1;

int n,m,q;

struct dominate_tree

void

dfs(

int x)

}int

find

(int x)

void

tarjan()

add(lat,sdom[x]

,x); bel[x]

=fa[x]

; x=fa[x]

;for

(int j=lat[x]

;j;j=nex[j]

) lat[x]=0

;}for(

int i=

2,x;i<=cnt;i++)}

void

dfs_res

(int x)

}void

work()

dfs(s)

;tarjan()

; tot=0;

for(

int i=

1;i<=n;i++)if

(idom[i]

)add

(cdy,idom[i]

,i);

dfs_lca

(s,s);}

void

init

(int n)

}void

dfs_lca

(int x,

int fa)

inline

intlca

(int x,

int y)

inline

intcalc

(int x,

int y)

inline

void

solve()

}t;signed

main()

hdu 4694 支配樹模板

題意 給你n個女生的聯絡情況,第n個人是大姐大 即題目中的根 從它開始會向其他人傳送訊息,如果第y個人失聯了那麼第x個人就無法收到訊息,就稱y是x的乙個重要的姐妹,現在問你每個人的重要的姐妹的編號總和,如果不連通那麼就是0。做法 看了將近三個小時的支配樹,總算是明白了一點點了。感覺別人講的會比較透一...

1917 支配值數目

void missing you for time meet you time missing you 自從遇見了你,就不停地想你。已知f與g兩個整數陣列,元素都已經從小到大排好序,請寫乙個程式,算出f中比g中元素大的對數。換句話說,f 0 比g中多少個元素大,f 1 比g中多少個元素大等,這些值的...

軟體構造課堂延伸(2) 支配樹

在動態分析程式效能時,遇到了支配樹這個概念,下面詳細解釋一下什麼叫做支配樹。支配樹 dominator tree 支配樹展示了記憶體匯出檔案中最大的物件。支配樹是用來研究使得其它物件存活的物件的強有力工具。支配樹是將原來記憶體中的應用關係圖轉化為乙個樹形結構,這個樹形結構的特點是 所有節點的兒子節點...