[转]二分图的必须边
每次枚举节点,删除匹配边,若不存在另一匹配则表示其为必须边
MaxMatch(); //进行最大匹配
yes = 0;
for(i = 1; i <= n; i++) //验证match[i]与i是不是唯一匹配的
{
x = match[i]; match[i] = -1;
g[x][i] = 0;
memset(flag, 0, sizeof(flag));
if(!dfs(x))//如果dfs(x)==0即找不到,就表示是唯一匹配,即可输出!
{
match[i] = x;
yes++;
if(yes > 1) printf(" ");
printf("(%c,%d)", 'A'+i-1, match[i]); //输出字母和字母对应的数字
}
g[x][i] = 1;
}
if(!yes) printf("none");
|
|

浙公网安备 33010602011771号