题目大意:有两个机器A和B,A机器有n个模式,B机器有m个模式,两个机器最初在0模式
然后有k个作业,每个作业有三个参数i,a,b
i代表作业编号,a和b代表第i作业要么在A机器的a模式下完成【或者】在B机器的b模式下完成
问两个机器总共最少变换多少次可以完成所有作业
简单的二分图裸题,但是要注意使用邻接表的时候加上对于b机器初始模式0的判断
而且题上还有数据的问题,有一个点k的值比题中描述大(我开5000过的)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; struct edge{
int y,next;
}e[]; int n,m,k,a,b,c,ecnt,ans;
int head[],point[];
bool used[]; void add(int a,int b)
{
e[++ecnt].y=b;
e[ecnt].next=head[a];
head[a]=ecnt;
} bool find(int x)
{
for(int i=head[x];i;i=e[i].next){
if(used[e[i].y]==&&e[i].y!=)
{
used[e[i].y]=;
if(point[e[i].y]==||find(point[e[i].y]))
{
point[e[i].y]=x;
return ;
}
}
}
return ;
} int main()
{
freopen("machine.in","r",stdin);
freopen("machine.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=k;++i)
{
scanf("%d%d%d",&a,&b,&c);
add(b,c);
}
ans=;
memset(point,,sizeof(point));
for(int i=;i<=n;++i){
memset(used,,sizeof(used));
if(find(i))ans++;
}
printf("%d",ans);
}