• 指派问题 --二分图匹配


    题目:

      有N台计算机和k个任务,我们可以给每台计算机分配一个任务,每台计算机能够处理的任务种类各不相同,请求出最多能够处理任务的个数;

     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 const int MAXN=1000;
     5 int uN,vN;  //u,v数目
     6 int g[MAXN][MAXN];//编号是0~n-1的
     7 int linker[MAXN];//表示b集合中的i匹配到a集合的元素 a集合代表机器b集合代表任务
     8 bool used[MAXN];//b集合被访问
     9 bool dfs(int u) //给第u台机器分配任务
    10 {
    11     int v;
    12     for(v=1;v<=vN;v++)
    13         if(g[u][v]&&!used[v])
    14         {
    15             used[v]=true;
    16             if(linker[v]==-1||dfs(linker[v]))//当任务v被占领时,把占领v任务的机器给重新分配任务,即dfs(linker[v])
    17             {
    18                 linker[v]=u;
    19                 return true;
    20             }
    21         }
    22     return false;
    23 }
    24 int hungary()
    25 {
    26     int res=0;
    27     int u;
    28     memset(linker,-1,sizeof(linker));
    29     for(u=1;u<=uN;u++)
    30     {
    31         memset(used,0,sizeof(used));
    32         if(dfs(u))  res++;
    33     }
    34     return res;
    35 }
    36 int main(){
    37 
    38 int n,m;
    39 while(cin>>n>>m)
    40 {uN=n;vN=m;
    41 int x,y;
    42     for(int i=1;i<=n;i++)
    43     {
    44         cin>>x;
    45         while(x--)
    46         {
    47             cin>>y;
    48             g[i][y]=1;
    49         }
    50     }
    51 
    52    cout<<hungary()<<endl;
    53 
    54 }
    55 
    56 return 0;
    57 
    58 }
  • 相关阅读:
    GGEditor
    Vue 项目(HTML5 History 模式) 部署服务器
    mysql连接状态
    mysql连接状态
    HBase配置性能调优
    HBase配置性能调优
    spark streaming检查点使用
    spark streaming检查点使用
    spark streaming的有状态例子
    spark streaming的有状态例子
  • 原文地址:https://www.cnblogs.com/WDKER/p/5488751.html
Copyright © 2020-2023  润新知