A - 一般最大マッチング Editorial /

Time Limit: 3 sec / Memory Limit: 1024 MB

問題文

グラフが与えられるので、最大マッチングを求めてください。

スライド、想定解、テストケースへのURLです。 リンク


入力

入力は以下の形式で標準入力から与えられる。

T
N M
a_1 b_1
a_2 b_2
:
a_M b_M

N M
a_1 b_1
a_2 b_2
:
a_M b_M

N M
a_1 b_1
a_2 b_2
:
a_M b_M
:
:
:
N M
a_1 b_1
a_2 b_2
:
a_M b_M
  • 1 行目にはテストケース数 T が与えられる。
  • 2 行目から T 個、テストケースの情報が与えられる。各テストケースの情報は以下の通り。
  • テストケースのうち 1 行目に、頂点数と辺数 N, M が与えられる。
  • テストケースのうち 2 行目から M 行には、a_i, b_i(0 ≦ a_i, b_i < N) が与えられる。これは辺 (a_i, b_i) を表す。
  • テストケースとテストケースの間には空行が挟まっている。
  • 多重辺、自己ループは無いが、グラフは連結とは限らない。

出力

T 行出力する。i 行目には、i 番目のテストケースで求めた最大マッチングを出力する。

具体的には、空白区切りで N 個の出力をする。i 番目には頂点 i のマッチング相手を出力する。マッチングしない場合は -1

たとえば、頂点数が 5 で、(0, 4)(1, 2) をマッチングさせたいなら以下のように出力。

4 2 1 -1 0

テストケース詳細

テストケースは全部で 5 ケースあり、以下のようになっています

Case1: T = 5000, 1 ≦ N ≦ 8 ランダムグラフ
Case2: T = 5000, 10 ≦ N ≦ 20 ランダムグラフ
Case3: T = 500, 50 ≦ N ≦ 100 ランダムグラフ
Case4: T = 50, 200 ≦ N ≦ 300 ランダムグラフ
Case5: T = 10, 200 ≦ N ≦ 300 マッチングする辺を決めて、最大マッチングがそれを超えない限り辺を追加し続けたグラフ


入力例1

10
2 1
0 1

3 2
0 1
1 2

4 3
0 1
1 2
2 3

5 6
0 2
0 4
1 2
2 3
2 4
3 4

6 7
0 3
1 2
1 3
1 4
2 4
3 4
3 5

9 17
0 2
0 4
0 5
0 6
0 7
1 5
1 7
2 3
2 5
2 6
2 8
3 4
3 6
4 5
4 6
4 8
5 8

5 4
0 4
1 3
1 4
2 4

8 10
0 4
0 5
1 2
1 6
1 7
2 4
2 6
3 4
3 5
3 6

10 20
0 1
0 5
0 7
0 8
1 5
1 6
1 7
1 9
2 3
2 6
2 9
3 6
4 5
4 8
5 7
5 8
5 9
6 7
7 9
8 9

9 17
0 1
0 4
1 2
1 3
2 3
2 4
2 5
2 7
3 6
3 8
4 6
4 7
4 8
5 6
5 8
6 7
6 8

出力例1

1 0
1 0 -1
1 0 3 2
2 -1 0 4 3
3 2 1 0 -1 -1
7 5 6 4 3 1 2 0 -1
4 3 -1 1 0
4 7 6 5 0 3 2 1
1 0 3 2 5 4 7 6 9 8
1 0 3 2 6 8 4 -1 5