C 求朋友圈的個數 並查集方法

2021-10-23 01:49:15 字數 1170 閱讀 3705

有n個同學,他們之間有些是朋友,有些不是。「友誼」是可以傳遞的,例如a和b是朋友,b和c是朋友,那麼a與c也是朋友;朋友圈就是完成「友誼」傳遞後的一組朋友。給定n*n的矩陣代表同學間是否是朋友,如果m[i][j]=1代表第i個學生與第j個學生是朋友,否則不是。求朋友圈的個數。

例如:input:

[[1,1,0],

[1,1,0],

[0,0,1]]

output:2

input:

[[1,1,0],

[1,1,1],

[0,1,1]]

output:1

#include

class

disjointset

_count = n;}~

disjointset()

intfind

(int p)

return p;

}void

union_

(int p,

int q)

if(_size[i]

< _size[j]

)else

_count--;}

private

: std::vector<

int> _id;

std::vector<

int> _size;};

class

solution

~solution()

intfindcirclenum

(std::vectorint>>

& m)}}

return disjoint_set._count;}}

;int

main()

,,};

std::vectorint>>m(

3, std::vector<

int>(3

,0))

;for

(int i =

0; i <

3; i++)}

solution solve;

printf

("%d\n"

, solve.

findcirclenum

(m))

;return0;

}

執行結果:

2

並查集(求朋友圈的個數)

有如下題目 已知有n個人和m對好友關係 存於陣列r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈,請寫程式求出這n個人裡一共有多少個朋友圈。假如 n 5 m 3 r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1 2 3屬於乙個朋友圈,4 5屬於另乙個朋友...

PAT 朋友圈(並查集)

某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入的第一行包含兩個正整數n...

5 9 朋友圈 (並查集)

某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入的第一行包含兩個正整數n...