zoukankan      html  css  js  c++  java
  • 【二分图裸题】poj1325机器调度

    题目大意:有两个机器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[5001];
    
    int n,m,k,a,b,c,ecnt,ans;
    int head[201],point[201];
    bool used[201];
    
    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]==0&&e[i].y!=0)
            {
                used[e[i].y]=1;
                if(point[e[i].y]==0||find(point[e[i].y]))
                {
                    point[e[i].y]=x;
                    return 1;
                }
            }
        }
        return 0;
    }
    
    int main()
    {
        freopen("machine.in","r",stdin);
        freopen("machine.out","w",stdout); 
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=k;++i)
        {
            scanf("%d%d%d",&a,&b,&c);
            add(b,c);
        }
        ans=0;
        memset(point,0,sizeof(point));
        for(int i=1;i<=n;++i){
            memset(used,0,sizeof(used));
            if(find(i))ans++;
        }
        printf("%d",ans);
    }
  • 相关阅读:
    bzoj1724[Usaco2006 Nov]Fence Repair 切割木板*
    vue-cli脚手架和webpack-simple模板项目
    Vue-router 进阶
    前端路由vue-router介绍
    vue的一些特殊特性
    生命周期钩子
    过滤器
    RSA加密算法
    欧几里得算法
    动态规划
  • 原文地址:https://www.cnblogs.com/rir1715/p/6775871.html
Copyright © 2011-2022 走看看