Try
FJNU2067:http://acm.fjnu.edu.cn/show?problem_id=2067
囧 二分图匹配…… 比赛的时候没细看 完全卡在B上了 没做出来
现在看看好囧噢。套模版的时候因为模版从1开始我从0开始忘了改交了好多WA 囧。
-
#include<iostream>
-
using namespace std;
-
-
#define MAXN 10005
-
#define MAXM 105
-
-
int m,n;
-
bool used[MAXN];
-
int link[MAXN];
-
bool map[MAXN][MAXM];
-
-
bool check(int t){
-
for(int i=0; i<m; i++){
-
if(!used[i]&&map[t][i]){
-
used[i] = true;
-
if(link[i]==-1||check(link[i])){
-
link[i] = t;
-
return true;
-
}
-
}
-
}
-
return false;
-
}
-
-
int Max(){
-
int ans = 0;
-
memset(link, -1, sizeof(link));
-
for(int i=0;i<n;i++){
-
memset(used, false, sizeof(used));
-
if(check(i)) ans++;
-
}
-
return ans;
-
}
-
-
int main(){
-
int k;
-
while(cin>>k>>m){
-
memset(map, false, sizeof(map));
-
int i,j,h,t;
-
int key[MAXM], st[MAXM];
-
n = 0;
-
for(i=0; i<k; i++){
-
cin>>key[i];
-
if(key[i]>m)key[i]=m;
-
st[i] = n;
-
n+=key[i];
-
}
-
for(i=0; i<k; i++){
-
for(j=0; j<m; j++){
-
cin>>t;
-
if(t==1){
-
for(h=0; h<key[i]; h++){
-
map[st[i]+h][j] = true;
-
}
-
}
-
}
-
}
-
cout<<Max()<<endl;
-
}
-
return 0;
-
}
- 无匹配