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小时
相关文章推荐
- 无向图的最小边覆盖
- hdu2603
- POJ 2112 (二分图多重匹配)
- poj-1469,1274 二分图匈牙利算法
- poj1422
- HDU-2444 二分图的判别和最大匹配数。
- HDU Problem B
- Problem F
- HDU1083(二分图+最大匹配+匈牙利算法)
- HDU1150(二分图+最大匹配+匈牙利算法)
- hdu2063(最大匹配+匈牙利算法)
- hdu4619(二分图+匈牙利算法)
- hdu2119(二分图+最小点覆盖+匈牙利算法)
- hdu1054(二分图+最小点覆盖数+匈牙利算法)
- hdu2458(二分图+最大独立数+匈牙利算法)
- hdu2236(二分法)
- 二分图的最大匹配 (匈牙利算法)
- 宝藏
- 过山车(HDU 2063)
- HDU5729 Rigid Frameworks