题目链接:http://poj.org/problem?id=1486
思路,匈牙利算法找到最大匹配,然后对每一条匹配的边进行检查,看是否可以有替换他的另一种最大匹配(即map中删掉这条匹配的边看能否找到最大增广路径),注意在删掉这条边是match对应的值应设置为初始值,每一条边检查完恢复map中之前删掉的路径。
#include<cstdio>
#include<cstring>
using namespace std;
const int num=505;
struct node
{
int xmin,xmax,ymin,ymax;
}data[num];
int n,map[num][num],match[num],vis[num],tx,ty;
int ok(int a)
{
if(tx>=data[a].xmin&&tx<=data[a].xmax&&ty>=data[a].ymin&&ty<=data[a].ymax)
return 1;
return 0;
}
int deal(int a)
{
int i;
for(i=0;i<n;i++)
if(vis[i]==0&&map[a][i])
{
vis[i]&