zoukankan      html  css  js  c++  java
  • Machine Schedule HDU1150

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

    所以这题求的是 二分图的最小覆盖点(用最小的点 联结所有的边)

    最小覆盖点==最大匹配数

    一开始为机器状态为0  所以0无需任何代价  不需要计算在内

    #include<bits/stdc++.h>
    using namespace std;
    
    int mp[105][105];
    int used[106];
    int vis[105];//记录的是匹配情况 
    int n,m;
    bool find1(int  x)
    {
        for(int j=1;j<m;j++)//从1开始是因为0不需要计算在内
        {
            if(mp[x][j]&&!used[j])
            {
                used[j]=1;
                if(!vis[j]||find1(vis[j]))
                  {
                      vis[j]=x;
                      return true;
                  }
            }
        }
        return false;
    }
    
    
    int main()
    {
        int k,cas,x,y;
        while(scanf("%d",&n),n)
        {
            memset(mp,0,sizeof(mp));
            memset(vis,0,sizeof(vis));
            scanf("%d%d",&m,&k);
            while(k--)
            {
                scanf("%d%d%d",&cas,&x,&y);
                mp[x][y]=1;
            }
            int ans=0;
            for(int i=1;i<n;i++)
            {
                memset(used,0,sizeof(used));//每次的使用  需要清除
                if(find1(i))ans++;
            }
            printf("%d
    ",ans);
        }
    
    }
  • 相关阅读:
    $("").append无反应
    go 客户端、服务端
    go mysql insert变量到数据库
    .gvfs: Permission denied
    go笔记
    java socket通信笔记
    (转)linux中top命令下显示出的PRNIRESSHRS\%MEM TIME+都代表什么
    adb Android Debug Bridge 安卓调试桥
    一阶段冲刺(四)
    一阶段冲刺(三)
  • 原文地址:https://www.cnblogs.com/bxd123/p/10361618.html
Copyright © 2011-2022 走看看