886 可能的二分法

2021-10-16 22:53:00 字數 1504 閱讀 2609

題目描述:示例 1:

輸入:n = 4, dislikes = [[1,2],[1,3],[2,4]]

輸出:true

解釋:group1 [1,4], group2 [2,3]

示例 2:

輸入:n = 3, dislikes = [[1,2],[1,3],[2,3]]

輸出:false

示例 3:

輸入:n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]

輸出:false

1 <= n <= 2000

0 <= dislikes.length <= 10000

dislikes[i].length == 2

1 <= dislikes[i][j] <= n

dislikes[i][0] < dislikes[i][1]

對於 dislikes[i] == dislikes[j] 不存在 i != j

方法1:

(1)先將不喜歡的關係,既不能同時存在於一組的關係,建立圖;

(2)每次以乙個不能共存的關係為基礎,將相關的具有不能共存於一組的關係,分配到兩個組中;

(3)然後再去找下一組不能共存的關係;

class

solution

//分別儲存兩組

queue<

int> q_1;

queue<

int> q_2;

//表示兩個組中已經分配過的點

vector<

bool

>

sign_1

(n+1

,false);

vector<

bool

>

sign_2

(n+1

,false);

for(

int i=

1;i<=n;

++i)

q_1.

push

(i);

//初始化分一組

//盡量將相關的不能共存的關係進行分配

while

(true

)while

(!q_1.

empty()

)if(sign_2[j]

) q_2.

push

(j);

//不能共存的關係分配到另一組}}

while

(!q_2.

empty()

)if(sign_1[j]

) q_1.

push

(j);}}

}}return

true

;//分配結束}}

;

886 可能的二分法

給定一組 n 人 編號為 1,2,n 我們想把每個人分進任意大小的兩組。每個人都可能不喜歡其他人,那麼他們不應該屬於同一組。形式上,如果 dislikes i a,b 表示不允許將編號為 a 和 b 的人歸入同一組。當可以用這種方法將所有人分進兩組時,返回 true 否則返回 false。impor...

可能的二分法

給定一組 n 人 編號為 1,2,n 我們想把每個人分進任意大小的兩組。每個人都可能不喜歡其他人,那麼他們不應該屬於同一組。形式上,如果 dislikes i a,b 表示不允許將編號為 a 和 b 的人歸入同一組。當可以用這種方法將所有人分進兩組時,返回 true 否則返回 false。示例 1 ...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...