AcWing397 逃不掉的路(邊雙)

2022-05-28 14:57:11 字數 958 閱讀 8634

無向圖縮點的low值定義是經過一條b邊能夠到的點的dfn的最小值

如果low[v]>=low[u],說明有割點,但是要特判樹邊,如果low[v]>low[u],說明是有割邊,但是要特判重邊,本題很顯然邊雙里的點都是不必要的

只有橋是必要的,先縮點之後跑一下lca

#includeusing

namespace

std;

const

int n=5e5+10

;int

h[n],ne[n],idx,e[n],cnt;

intdfn[n],low[n],isce[n];

int f[n][21

];int

ecc[n];

intdepth[n];

intfa[n];

vector

g[n];

void add(int a,int

b)int

n,m,times,ans;

void tarjan(int

u)

else

if(j!=fa[u]) low[u]=min(low[u],dfn[j]);

}}void dfs(int u,intx)}

void

bfs()}}

}}int lca(int a,int

b) }

if(a==b)

return

a;

for(i=20;i>=0;i--)

}return f[a][0];}

intmain()

tarjan(1);

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

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

}bfs();

intqi;

cin>>qi;

while(qi--)

}

view code

397 整數替換

題目描述 給定乙個正整數 n 你可以做如下操作 如果 n 是偶數,則用 n 2替換 n 如果 n 是奇數,則可以用 n 1或n 1替換 n n 變為 1 所需的最小替換次數是多少?示例 1 輸入 n 8 輸出 3 解釋 8 4 2 1 示例 2 輸入 n 7 輸出 4 解釋 7 8 4 2 1 或 ...

397 整數替換

題目描述 給定乙個正整數 n,你可以做如下操作 1.如果 n 是偶數,則用 n 2替換 n。2.如果 n 是奇數,則可以用 n 1或n 1替換 n。問 n 變為 1 所需的最小替換次數是多少?可見,該題的難點在於n是奇數時,應該是n 1還是n 1。解法一 遞迴 當n 1時,return 0 將int...

LeetCode397 整數替換

原題目給定乙個正整數 n,你可以做如下操作 如果 n 是偶數,則用 n 2替換 n。如果 n 是奇數,則可以用 n 1或n 1替換 n。n 變為 1 所需的最小替換次數是多少?示例 1 輸入 8 輸出 3 解釋 8 4 2 1 示例 2 輸入 7 輸出 4 解釋 7 8 4 2 1 或7 6 3 2...