zoukankan      html  css  js  c++  java
  • AcWing376 机器任务(最小点覆盖)

    比较容易看出是最小点覆盖问题,并且本题因为只有两种机器,所以是二分图问题,将对应的任务的两种机器连边

    答案就是求取最大匹配数。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int n,m,k;
    int match[N];
    int g[200][200];
    int st[200];
    int find(int u){
        int i;
        for(i=1;i<m;i++){
            if(!st[i]&&g[u][i]){
                st[i]=1;
                if(match[i]==-1||find(match[i])){
                    match[i]=u;
                    return true;
                }
            }
        }
        return false;
    }
    int main(){
        while(cin>>n>>m>>k){
            if(n+m+k==0)
            break;
            int i;
            memset(match,-1,sizeof match);
            memset(g,0,sizeof g);
            for(i=1;i<=k;i++){
                int t,a,b;
                cin>>t>>a>>b;
               if(!a||!b)
               continue;
               g[a][b]=1;
            }
            int res=0;
            for(i=1;i<n;i++){
                memset(st,0,sizeof st);
                if(find(i))
                    res++;
            }
            cout<<res<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13217566.html
Copyright © 2011-2022 走看看