無向圖縮點的low值定義是經過一條b邊能夠到的點的dfn的最小值
如果low[v]>=low[u],說明有割點,但是要特判樹邊,如果low[v]>low[u],說明是有割邊,但是要特判重邊,本題很顯然邊雙里的點都是不必要的
只有橋是必要的,先縮點之後跑一下lca
#includeusingview codenamespace
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--)
}
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...