[BalticOI 2018] 多角恋
题目描述
**题目译自 [BalticOI 2018](https://boi2018.progolymp.se/tasks/) Day1「[Love Polygon](https://boi18-day1-open.kattis.com/problems/boi18.polygon)」**
给一张 $N$ 个点的有向图,每个点的出度为 $1$。每次可以花费 $1$ 的代价修改图上的一条边的终点,也就是改变从一个点出发所到达的点。求最少需要花费多少代价,才能使这张图形成若干个两两不相交的二元环,并且图上的所有点都在某一个环里。
输入输出格式
输入格式
第一行包含一个整数 $N$。
接下来的 $N$ 行每行包含两个字符串 $s$ 和 $t$,表示图中存在一条 $s\rightarrow t$ 的边。
字符串只包含小写英文字母,且长度不超过 $10$。
输出格式
输出一个整数,表示最少需要花费多少代价,才能使这张图形成若干个两两不相交的二元环,并且图上的所有点都在某一个环里。无解请输出 $-1$。
输入输出样例
输入样例 #1
8
leonard emmy
ada emmy
isaac leonard
emmy pierre
pierre bernhard
bernhard emmy
sofia karl
karl sofia
输出样例 #1
3
输入样例 #2
4
a c
b c
c d
d d
输出样例 #2
3
输入样例 #3
3
rocky scarlet
scarlet patrick
patrick rocky
输出样例 #3
-1
说明
#### 样例 1 解释
![](https://cdn.luogu.com.cn/upload/image_hosting/1ojydan1.png)
唯一的最优解如上图所示,图的上半部分为原图,底色为粉色的三个点为需要修改的边的起点;图的下半部分表示修改后的情况。
#### 样例 2 解释
存在多组最优解。其中一种是分别改变一条以 ``a``、``b`` 和 ``d`` 为起点的边,使他们分别连接到 ``b``、``a`` 和 `c`。
#### 样例 3 解释
图中有 $3$ 个点,无论如何修改边的终点,总会有一个人不在环里。
| 子任务 | 分值 | 数据范围 | 附加限制 |
|:----------:|:-------:|:-------------:|:-------------:|
|$1$|$21$|$2\leqslant N\leqslant 20$|.|
|$2$|$25$|$2\leqslant N\leqslant 100\, 000$|每个点都有一条入边(可能有自环)|
|$3$|$29$|$2\leqslant N\leqslant 100\, 000$|不存在两个点或更多个点构成的环|
|$4$|$25$|$2\leqslant N\leqslant 100\, 000$|.|