すべてのチャレンジ
中級 0件解決済み 正答率0%

Can We Split Into Two Teams?

Decide whether people can be assigned to two teams so that each listed pair is on opposite teams.

問題

Decide whether people can be assigned to two teams so that each listed pair is on opposite teams. Every person receives exactly one team; either team may be empty. People without a listed pair can go on either team. Check every connected group of constraints.

Implement split_into_two_teams(people, pairs).

Input

people: The number of people, numbered from 1.

pairs: Rows [first_person, second_person] that must be separated.

Output

Return true if any valid assignment exists, otherwise false. Do not return the assignment.

制約

1 ≤ people ≤ 100,000. 0…200,000 pairs of distinct person IDs in 1…people. Duplicate pairs are allowed and repeat the same constraint.

例

例 1
入力:
pairs = [
    [1, 2],
    [2, 3],
    [3, 1]
]
people = 3

期待される出力:
expected = False
入力:
std::vector<std::vector<long long>> pairs = {
    {1, 2},
    {2, 3},
    {3, 1}
};
long long people = 3;

期待される出力:
bool expected = false;
入力:
long[][] pairs = new long[][] {
    new long[] {1, 2},
    new long[] {2, 3},
    new long[] {3, 1}
};
long people = 3;

期待される出力:
bool expected = false;

解説

If 1 is on team A, 2 must be on B, and 3 must be on A. The last pair then violates the rule.

例 2
入力:
pairs = [
    [1, 2],
    [2, 3]
]
people = 4

期待される出力:
expected = True
入力:
std::vector<std::vector<long long>> pairs = {
    {1, 2},
    {2, 3}
};
long long people = 4;

期待される出力:
bool expected = true;
入力:
long[][] pairs = new long[][] {
    new long[] {1, 2},
    new long[] {2, 3}
};
long people = 4;

期待される出力:
bool expected = true;

解説

Put 1 and 3 on team A and 2 on team B. Person 4 can join either team.

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。