题意:
给出A,B两台机器,并且各自的工作方式有n,m种,给出k个任务,及其第ki个任务能够在A,B机器上完成方式,ai,bi!!机器每更换一次工作方式花费时间 1,求最小花费!!
思路:
由于刚学二分匹配,行列匹配法,1A,有点YY。。。
代码:
#include<iostream>
#include<cstdio>
#include<memory.h>
#include<algorithm>
using namespace std;
int vis[102],mat[102];
int n,m,k;
int f[1002][1002];
int find(int x)
{
for(int i=f[x][0];i>=1;i--)
{
int y=f[x][i];
if(!vis[y])
{
vis[y]=1;
if(mat[y]==-1||find(mat[y]))
{
mat[y]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int i,j,k,ni,mi,ki,ans;
while(scanf("%d",&n),n)
{
memset(f,0,sizeof(f));
memset(mat,-1,sizeof(mat));
scanf("%d%d",&m,&k);
ans=0;
for(i=0;i<k;i++)
{
scanf("%d%d%d",&ki,&ni,&mi);
f[ni][++f[ni][0]]=mi;
}
for(i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(find(i))
ans++;
}
printf("%d\n",ans);
}
return 0;
}