问题2356--What is 匈牙利算法?

2356: What is 匈牙利算法?

[命题人 : ]
时间限制 : 1 sec  内存限制 : 128 MB

提交

题目描述

匈牙利算法又称NTR算法,它解决了最大匹配问题。所以NTR能解决纯爱(不是)
现在小x收到了n个男生,以及n个女生的简历,想要帮他们促成姻缘。
他惊奇的发现对于每个人,不管是男生,还是女生,他们都有两条相互暗恋的一条红线。
小x希望你能帮他选择出尽可能多的红线,使得男生和女生能经可能的匹配上。
PS:一个男生只能和一个女生匹配!!!!一个女生只能和一个男生匹配!!!!

由于本题读入量较大,所以如果你使用的不是C/C++语言,请切换成C/C++语言。
如果你使用的是C/C++语言,那么这里给出快读模板
int read() {
  char ch;
  int x = 0;
  bool f = true;
  for (ch = getchar(); !isdigit(ch); ch = getchar())
    if (ch == '-') f ^= f;
  for (; isdigit(ch); ch = getchar()) x = (x << 3) + (x << 1) + ch - 48;
  return f ? x : -x;
}

如果你要读入一个整数n,调用快读函数的写法为
int n;
n=read();


输入

第一行输入一个数字n
随后n行,每行两个数字a,b分别代表第i个男生暗恋的且暗恋他的两个女生的编号。
保证对于每个女生的编号一定出现两次。
保证a不等于b
n>=2,n<=107

输出

输出最大匹配数量。

样例输入 Copy

3
1 3
2 3
1 2

样例输出 Copy

3

提示

对于样例我们可以让男1和女3,男2和女2,男3和女1分别匹配,最多可以凑成三对