AT_pakencamp_2020_day2_c A + B
题目描述
定义:有一个有向图,包含 $N$ 个顶点和 $M$ 条边,顶点编号为 $1$ 到 $N$,边编号为 $1$ 到 $M$。
操作:可以任意次数执行以下操作:
- 选择一个顶点 $A(1 \le A \le N)$ 和另一个顶点 $B(1 \le B \le N,A \le B)$,移除从 $A$ 到 $B$ 的一条边,同时移除从 $B$ 到另一个顶点 $C(1 \le C \le N,B \ne C)$ 的一条边。
- 如果 $A \ne C$,则添加一条从 $A$ 到 $C$ 的边。
问题:经过一系列操作后,剩余的边的数量最少是多少?
输入格式
第一行包含一个整数 $T$,表示测试用例的数量。
接下来 $T$ 行,每行描述一个测试用例。
每个测试用例的第一行包含两个整数 $N$ 和 $M$,表示顶点和边的数量。
接下来 $M$ 行,描述 $M$ 条边,每行包含两个整数 $A$ 和 $B$,表示从顶点 $A$ 到顶点 $B$ 存在一条边。
输出格式
对于每个测试样例,输出一个整数,表示剩余边的最少数量。
说明/提示
### 制約
- 入力は全て整数である.
- $ 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 の制約のみを満たす.