您的位置:首页 > 其它

hdu4619

2013-07-30 17:42 405 查看
#include<iostream>
#include<cstring>
#include<vector>
#include<utility>
using namespace std;
int n,m,mat[1111];
pair<int,int> p1[1111],p2[1111];
vector<int> v[1111];
bool mark[1111];
bool judge(int i,int j)
{
if(p1[i].first==p2[j].first||p1[i].first==p2[j].first-1)
if(p1[i].second==p2[j].second||p1[i].second==p2[j].second+1)
return 1;
return 0;
}
bool find_(int i)
{
for(int j=0;j<v[i].size();j++)
{
int t=v[i][j];
if(!mark[t])
{
mark[t]=1;
if(mat[t]==-1||find_(mat[t]))
{
mat[t]=i;
return 1;
}
}
}
return 0;
}
int main()
{
while(cin>>n>>m,n+m)
{
for(int i=0;i<1111;i++)
{
v[i].clear();
mark[i]=0;
mat[i]=-1;
}
for(int i=0;i<n;i++)
{
cin>>p1[i].first>>p1[i].second;
}
for(int i=0;i<m;i++)
{
cin>>p2[i].first>>p2[i].second;
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(judge(i,j))
v[i].push_back(j);
int max=0;
for(int i=0;i<1111;i++)
{
if(v[i].empty())continue;
if(find_(i))max++;
memset(mark,0,sizeof(mark));
}
cout<<m+n-max<<endl;
}
return 0;
}
我是煞笔,把等于号写成赋值号找了2小时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二分图