/*
二分图的定义:如果一个图所有顶点可以被分为X和Y两个集合,并且所有边的两个顶点恰好
一个属于集合X,另一个属于集合Y,即每个集合内顶点没有边相连,那么此图就是二分图
步骤如下:
1.首先从任意一个未被配对的点u开始,从点u的边中任意选一条边(假设这条边是u->v)
开始配对。如果此时v还没有被配对,则配对成功,此时便找到一条增广路(只不过这条增广路
比较简单)。如果此时v已经被配对,那就要尝试进行连锁反应。如果尝试成功了,则找到一条增广路,
此时更新原来的配对关系,这里要用一个数组match来记录配对关系,比如点v与点u配对了,就记做
match[v] = u。配对成功后,记得要将配对数加1.配对的过程我们可以通过深度优先搜索来实现,
当然广度优先搜索也可以。
2.如果刚才所选的边配对失败,要从点u的边中重新选一条边,进行尝试。直到点
u配对成功,或者尝试过点u所有的边为止。
3.接下来继续对剩下没有被配对的点一一进行配对,直到所有的点都尝试完毕,找不到
新的增广路为止。
4.输出配对数
*/
#include "stdio.h"
int e[101][101];
int match[101];
int book[101];
int n,m;
int dfs(int u)
{
int i;
for(i = 1;i <=n;i++)
{
&n