P3388 模板 割點(割頂)

2021-09-07 15:40:12 字數 2403 閱讀 4978

割點

給出乙個n個點,m條邊的無向圖,求圖的割點。

輸入格式:

第一行輸入n,m

下面m行每行輸入x,y表示x到y有一條邊

輸出格式:

第一行輸出割點個數

第二行按照節點編號從小到大輸出節點,用空格隔開

輸入樣例#1:

6 7

1 21 3

1 42 5

3 54 5

5 6

輸出樣例#1:

1 

5

n,m均為100000

tarjan 圖不一定聯通!!!

割點真是乙個非常神奇的東西。

雖然和tarjan很像,

而且能理解其中的奧秘。

但是**還是看的一臉蒙蔽,。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

#define lli long long int

9using

namespace

std;

10const

int maxn=1000001;11

const

int maxn=0x7fffff

;12 inline void read(int &n)

1317

while(c>='

0'&&c<='9'

)18

19 flag==1?n=-x:n=x;20}

21int

n,m;

22struct

node

23edge[maxn];

26int

head[maxn];

27int num=1;28

void add_edge(int x,int

y)29

35int dfn[maxn];//

dfs的順序

36int low[maxn];//

每個點能追溯到的最近公共祖先

37int

vis[maxn];

38int ans[maxn];//

是否是割點

39int ansnum; //

割點的數量

40int tot=0;41

int tarjan(int now,int

fa)4262}

63}64}

65return

low[now];66}

67int

main()

6878

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

79if(low[i]==0

)80 tarjan(i,-1

);

81 printf("

%d\n

",ansnum);

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

83if(ans[i]==1

)84 printf("

%d "

,i);

85return0;

86 }

update in 2017.11.7

補乙份利用void型別實現的**

#include#include#include#include#includeusing namespace std;

const int maxn=1e6+10;

inline int read()

while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return x*f;

}struct node

edge[maxn];

int head[maxn];

int num=1;

inline void add_edge(int x,int y)

int dfn[maxn];//詢問的時間

int low[maxn];//最早能追溯到的祖先

int n,m,tot;//當前已經列舉了多少節點

int ans[maxn];//是否是割點

int ansnum=0;

void tarjan(int now,int fa) }}

int main()

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

if(!dfn[i])

tarjan(i,-1);

printf("%d\n",ansnum);

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

if(ans[i])

printf("%d ",i);

return 0;

}

P3388 模板 割點(割頂)

割點 題目描述 給出乙個n個點,m條邊的無向圖,求圖的割點。輸入格式 第一行輸入n,m 下面m行每行輸入x,y表示x到y有一條邊 輸出格式 第一行輸出割點個數 第二行按照節點編號從小到大輸出節點,用空格隔開 輸入樣例 1 複製6 7 1 21 3 1 42 5 3 54 5 5 6輸出樣例 1 複製...

P3388 模板 割點(割頂)

n 給定一張無向圖g g g,求圖的割點 s ol utio nsolution soluti on判斷條件 非搜尋樹起點x xx,任意乙個子節點y yy,滿足dfn x l ow y dfn x low y dfn x l ow y 搜尋樹起點rtrt rt,至少兩個子節點y yy,滿足dfn x...

P3388 模板 割點(割頂)

割點 給出乙個n個點,m條邊的無向圖,求圖的割點。輸入格式 第一行輸入n,m 下面m行每行輸入x,y表示x到y有一條邊 輸出格式 第一行輸出割點個數 第二行按照節點編號從小到大輸出節點,用空格隔開 輸入樣例 1 複製6 7 1 21 3 1 42 5 3 54 5 5 6 輸出樣例 1 複製1 5 ...