思路:判斷乙個點是否是割點的兩個條件:1、如果乙個點v是根結點並且它的子女個數大於等於2,則v是割點。2、如果點v不是根結點,並且存在她的乙個子女u,使得low[u]>=dfn[v],則v是割點。然後我發現以前求割點的寫法有點問題,=.=//。幸好不是在比賽中遇到!貢獻上最新模板。
1 #include2 #include3 #include4 #include5view codeusing
namespace
std;
6#define maxn 4444478
struct
edgeedge[maxn<<1
];11
12int
n,m,ne;
13int
head[maxn];
1415
void insert(int u,int
v)16
2122
intcnt,ans;
23int
low[maxn],dfn[maxn];
24bool
mark[maxn];
2526
bool
is_cutpoint[maxn];
27void tarjan(int root,int
u)28
else
if(mark[v])42}
43if(u==root&&rt_son>=2)46
}4748int
main()
4961 cnt=ans=0
;62 memset(mark,false,sizeof
(mark));
63 memset(dfn,0,sizeof
(dfn));
64 memset(is_cutpoint,false,sizeof
(is_cutpoint));
65for(int i=1;i<=n;i++)
68for(int i=1;i<=n;i++)if(is_cutpoint[i])ans++;
69 printf("
case %d: %d\n
",t++,ans);70}
71return0;
72 }
P3388 割頂 求割點個數
第一行輸入兩個正整數 n,mn,m。下面 mm 行每行輸入兩個正整數 x,yx,y 表示 xx 到 yy 有一條邊。第一行輸出割點個數。第二行按照節點編號從小到大輸出節點,用空格隔開。輸入 1複製 6 7 1 21 3 1 42 5 3 54 5 5 6 輸出 1複製 1 5 code includ...
藍橋杯 歷屆試題(只有40分,強聯通求割點個數)
在網上看了看其他人的題解,有拿並查集判斷去除某個點後兩個是否屬於同一棵樹的,有用dfs判斷從某點到某點的方法有幾個,順便記錄路上經過點,到達則每個點經過次數加一,最後判斷方法和次數是否一致,一致則說明為必經dian 也可以用深搜和廣搜判斷去除某一點後,是否還能抵達.我看了看 好像屬於割點,可以用ta...
Doctor order 逆序數求交點個數
題目大意 兩條退垂直於x軸的直線,y沒有限制,給出幾條y kx b的直線,求這些直線將兩條線之間的區域分割成幾塊兒。解題思路 經過研究 多試幾次是好了 結果 直線數 交點數 1。所以重點就變成了求交點的個數,從大牛們的部落格中看到用逆序數求交點個數,頓時感覺好牛,有木有!過程是這樣的 對每一條直線的...