zoukankan      html  css  js  c++  java
  • HDU 1150

    又一二分图题,虽然从题目不能直接看出来,但题目意思是求出最小重启次数,即找出最少的点将所有工作覆盖,即二分图的最小点覆盖。

    最小点覆盖=最大匹配,所以直接是匈牙利算法,机器A、B分别看作二分图左右顶点,边表示可完成工作的两种模式。

     1 //最小点覆盖=最大匹配 
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 #include<string.h>
     6 #define max 510
     7 
     8 int stu[max][max],visit[max],linker[max],n,m,i,j,k,res;
     9 
    10 bool dfs(int i){
    11     int j;
    12     for(j=n;j<n+m;j++){
    13         if(stu[i][j]==1&&visit[j]==0){
    14             visit[j]=1;
    15             if(linker[j]==-1||dfs(linker[j])){
    16                 linker[j]=i;
    17                 return true;
    18             }
    19         }
    20     }
    21     return false;
    22 }
    23 
    24 int main(){
    25     while(scanf("%d",&n)!=EOF&&n!=0){
    26         scanf("%d%d",&m,&k);
    27         memset(stu,0,sizeof(stu));
    28         memset(linker,-1,sizeof(linker));
    29         res=0;
    30         while(k){
    31             scanf("%d%d%d",&i,&i,&j);
    32             stu[i-1][j+n-1]=1;   //从0开始
    33             k--; 
    34         }
    35         for(i=0;i<n;i++){
    36             memset(visit,0,sizeof(visit));
    37             if(dfs(i)) res++;
    38         }
    39         printf("%d
    ",res);
    40     }
    41     return 0;
    42 }
    View Code
  • 相关阅读:
    静态(static)、虚拟(virtual)、动态(dynamic)或消息处理(message)
    SQLLITE
    SQLite数据表和视图
    SQLite
    DELPHI 泛型
    indy10 学习2
    indy10 线程池
    indy
    Indy10 控件的使用(2)TidTCpServer组件学习
    Socket心跳包机制
  • 原文地址:https://www.cnblogs.com/daic/p/4857052.html
Copyright © 2011-2022 走看看