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;}

原创粉丝点击