poj 1325 二分匹配
来源:互联网 发布:影楼美工字体 ttf 编辑:程序博客网 时间:2024/05/16 05:19
//匈牙利算法//将机器A上的任务和机器B上的进行匹配//最大匹配即为问题的解#include <iostream>#include <cstring>#define MAXN 110using namespace std;int nx,ny;int G[MAXN][MAXN];int cx[MAXN],cy[MAXN];int mk[MAXN];int ans;int path(int u){ for(int v = 1; v <= ny; v++) { if(G[u][v] && !mk[v]){ mk[v] = 1; if(cy[v] == -1 ||path(cy[v])) { cx[u] = v; cy[v] = u; return 1; }} } return 0;}int MaxMatch(){ ans = 0; memset(cx,0xff,sizeof(cx)); memset(cy,0xff,sizeof(cy)); for(int i = 1; i <= nx; i++) { if(cx[i] == -1){ memset(mk,0,sizeof(mk)); ans += path(i);} }}int main(){ int k; int x,y,z; while(cin>>nx) { memset(G,0,sizeof(G)); if(nx == 0)break; cin>>ny>>k; for(int i = 0; i < k; i++){ cin>>z>>x>>y; G[x][y] = 1;} MaxMatch(); cout<<ans<<endl; } return 0;}