AT_pakencamp_2020_day2_c A + B
Description
[problemUrl]: https://atcoder.jp/contests/pakencamp-2020-day2/tasks/pakencamp_2020_day2_c
define君は $ N $ 頂点 $ M $ 辺の**単純とも連結とも限らない有向グラフ**を持っており, 頂点には $ 1,\ 2,\ \cdots\ N $ の番号が,辺には $ 1,\ 2,\ \cdots\ M $ の番号がついている.
有向辺 $ i $ は 頂点 $ A_i $ から 頂点 $ B_i $ へと張られている.
彼は以下の操作を任意の回数行える.
1. 頂点 $ A\ (1\ \leq\ A\ \leq\ N) $ から頂点 $ B\ (1\ \leq\ B\ \leq\ N,\ A\ \neq\ B) $ を結ぶ辺と, 頂点 $ B $ から頂点 $ C\ (1\ \leq\ C\ \leq\ N,\ B\ \neq\ C) $ を結ぶ辺をそれぞれ $ 1 $ 本選ぶ.
2. 選んだ $ 2 $ 本の辺を消し,$ A\ \neq\ C $ の場合は新たに頂点 $ A $ から 頂点 $ C $ に有向辺を $ 1 $ 本張る.
適切に操作をした時,最終的に残る辺の本数は最少で何本になるか? $ T $ 件のテストケースそれぞれについて求めよ.
Input Format
入力は以下の形式で標準入力から与えられる。
**各入力データ**について,以下の形式で入力が与えられる.
> $ T $ ($ 1\ $件目のテストケースの情報) ($ 2\ $件目のテストケースの情報) $ \vdots $ ($ T\ $件目のテストケースの情報)
**各テストケース**について,以下の形式で入力が与えられる.
> $ N\ M $ $ A_1\ B_1 $ $ A_2\ B_2 $ $ \vdots $ $ A_M\ B_M $
Output Format
$ T $ 行に渡って標準出力に出力せよ.
$ i $ 行目には,$ i $ 個目のテストケースにおける答えを出力せよ.
Explanation/Hint
### 制約
- 入力は全て整数である.
- $ 1\ \leq\ T\ \leq\ 100 $
- $ 2\ \leq\ N\ \leq\ 10^6 $
- $ 1\ \leq\ M\ \leq\ 10^6 $
- $ 1\ \leq\ A_i,B_i\ \leq\ N $
- $ A_i\ \neq\ B_i $
- $ T $ 件のテストケースに含まれる $ N,M $ の総和はそれぞれ $ 10^6 $ 以下
与えられる有向グラフは多重辺を含む場合がある事に注意せよ. ### 小課題
1. ($ 25 $ 点) $ N=2 $
2. ($ 25 $ 点) $ M\ \leq\ 2 $
3. ($ 25 $ 点) $ M\ =\ N,\ A_i\ =\ i $ , 各 $ i\ (1\ \leq\ i\ \leq\ N) $ について $ B_j\ =
\ i $ を満たす $ j $ は $ 1 $ つ
4. ($ 25 $ 点) $ M\ =\ N-1,\ A_i\ =\ i+1,B_i $
5. ($ 100 $ 点) $ M\ =\ N,\ A_i\ =\ i $
6. ($ 200 $ 点) 追加の制約はない.
### Sample Explanation 1
1 → 2, 2 → 1 を選び,消すのが最適である.この入力は小課題 1, 2, 3, 5, 6 の制約を満たす.
### Sample Explanation 2
3 → 2, 2 → 1 を消し,3 → 1 を追加するのが最適である.この入力は小課題 4, 6 の制約を満たす.
### Sample Explanation 3
例えば,以下のように操作すると最適である. 1. 1 → 3, 3 → 6 を消し,1 → 6 を追加する.この時,1 → 6 は 2 本ある. 2. 1 → 6, 6 → 2 を消し,1 → 2 を追加する.なお,1 → 6 はまだ 1 本ある. 3. 1 → 2, 2 → 5 を消し,1 → 5 を追加する. この入力は小課題 6 の制約のみを満たす.
### Sample Explanation 4
この入力は小課題 6 の制約のみを満たす.