POJ 1325 Machine Schedule(二分匹配-hungary)

来源:互联网 发布:薛家 知乎 编辑:程序博客网 时间:2024/05/15 07:16

Description
有两个机器A和B,A机器有n个模式,B机器有m个模式,两个机器最初在0模式,有k个作业,每个作业有三个参数i,a,b,i代表作业编号,a和b代表第i作业要么在A机器的a模式下完成或者在B机器的b模式下完成,问两个机器总共最少变换多少次可以完成所有作业
Input
多组用例,每组用例第一行为三个整数n,m,k分别表示两种机器的模式数量以及任务数,之后k行每行三个整数i,a,b表示第i作业要么在A机器的a模式下完成或者在B机器的b模式下完成,以0结束输入
Output
对于每组用例,求两个机器总共最少变换多少次可以完成所有作业
Sample Input
5 5 10
0 1 1
1 1 2
2 1 3
3 1 4
4 2 1
5 2 2
6 2 3
7 2 4
8 3 3
9 4 3
0
Sample Output
3
Solution
两排点,第一排n个点表示A机器的模式,第二排m个点表示B机器的模式,对于每个任务从第一排点到第二排点连边,那么题目所求即为用最少的点覆盖所有的边,即求这个二分图的最小点覆盖,也即最大匹配,套hungary模版即可
Code

#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define maxn 111int uN,vN;int g[maxn][maxn];int linker[maxn];bool used[maxn];bool dfs(int u){    int v;    for(v=0;v<vN;v++)        if(g[u][v]&&!used[v])        {            used[v]=true;            if(linker[v]==-1||dfs(linker[v]))            {                linker[v]=u;                return true;            }            }      return false;  }    int hungary(){    int res=0;    int u;    memset(linker,-1,sizeof(linker));    for(u=0;u<uN;u++)    {        memset(used,0,sizeof(used));        if(dfs(u))res++;    }     return res;   }  int main(){    int k;    while(scanf("%d%d%d",&uN,&vN,&k),uN)    {        memset(g,0,sizeof(g));        while(k--)        {            int id,u,v;            scanf("%d%d%d",&id,&u,&v);            g[u-1][v-1]=1;        }        int ans=hungary();         printf("%d\n",ans);    }    return 0;} 
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 盆栽花用肥多了怎么办 辊底式退火炉出炉温度高怎么办 黑枸杞长霉了怎么办 被子睡久了发黄怎么办 丝棉被淋了雨怎么办呢? 厚棉花被有霉味怎么办 可乐倒在棉絮上怎么办 酸奶倒在被子上怎么办 发现自家房屋墙壁发霉怎么办 布艺拖鞋发霉了怎么办 棉拖鞋洗了还臭怎么办 棉拖鞋洗了发黄怎么办 小狗5天不吃东西怎么办 手上猴子总是不停的起怎么办 真空压缩袋破了怎么办 兔子突然腿瘸了怎么办 被宠物兔咬出血怎么办 小兔子不吃东西精神不好怎么办 小狗脐带咬开了怎么办 刚生的狗就死了怎么办? 兔子生了不喂奶怎么办 兔子出生4天摸了怎么办 兔子吃了纸箱子怎么办 被小兔子抓一下怎么办 兔子吃了蟑螂药怎么办 兔子洗了澡要死怎么办 养的花蔫了怎么办 养的小鸡很大了怎么办 养的小兔子死了怎么办 小狗出现爬跨行为怎么办 养的小狗总做吞咬人的行为怎么办 螃蟹和柿子一起吃了怎么办 指甲上月牙没了怎么办 手指上月牙没了怎么办 指甲上没半月牙怎么办 电动车车牌被偷了怎么办 警察拖车拖坏了怎么办 6岁儿童牙疼怎么办 小白单车不退押金怎么办 光盘放笔记本电脑里读不出来怎么办 cd光盘读不出来怎么办