zoukankan      html  css  js  c++  java
  • HDU 1150 Machine Schedule

    题目大意:有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。

    题解:由于只要一台机器调到某模式就可以完成一个任务那么直接相当于在平面内选取几个点可以使全部的边被覆盖,所以就是二分图的最小点覆盖。

    #include <cstring>
    #include <cstdio>
    #include <vector>
    using namespace std;
    const int N=505;
    int link[N],used[N];
    vector v[N];
    bool Dfs(int k){
        for(int i=0;i<v[k].size();i++){
            int a=v[k][i];
            if(used[a]==0){
                used[a]=1;
                if(link[a]==-1||Dfs(link[a])){link[a]=k;return 1;}
            }
        }return 0;
    }
    int main(){
        int i,n,m,count,a,b,c,seg;
        while(scanf("%d",&n),n!=0){
            scanf("%d%d",&m,&seg);
            memset(link,-1,sizeof(link));
            for(i=0;i<n+m;i++)v[i].clear();
            while(seg--){
                scanf("%d%d%d",&c,&a,&b);
                if(a!=0&&b!=0){
                    v[a].push_back(b+n);
                    v[b+n].push_back(a);
                }
            }count=0;
            for(i=0;i<m+n;i++){
                memset(used,0,sizeof(used));
                if(Dfs(i))count++;
            }
            printf("%d
    ",count/2);  
        }
        return 0;
    }
    
  • 相关阅读:
    C++中整型变量的存储大小和范围
    A1038 Recover the Smallest Number (30 分)
    A1067 Sort with Swap(0, i) (25 分)
    A1037 Magic Coupon (25 分)
    A1033 To Fill or Not to Fill (25 分)
    A1070 Mooncake (25 分)
    js 获取控件
    C#代码对SQL数据库添加表或者视图
    JS 动态操作表格
    jQuery取得下拉框选择的文本与值
  • 原文地址:https://www.cnblogs.com/forever97/p/3625543.html
Copyright © 2011-2022 走看看