• hdu_1054(二分图)


          有点进步了,accepted 二分图

          1.最大匹配

          2.最小点覆盖(来源于最大匹配)

          hdu1054就是关于最小点覆盖的问题(貌似还能用树状DP,贪心算法来做,待完成),明白了最大匹配与最小点覆盖的关系这题也就easy 了

         

    //静以修身
    //答应自己的就不要失信
    #include <iostream>
    #include <vector>//如果换成<vector.h>就编译错误,但在codeblocks上可以通过
    using namespace std;
    const int Max=100000;
    int link[Max],used[Max];
    vector <int> v[Max];//用于图的记录
    int Dfs(int k)//深度搜索,找出最大匹配数
    {
        int i;
        //used[k]=1;
        for(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,count,a,n,b,t,k;
        while(cin>>n)
        {
            k=n;
            memset(link,-1,sizeof(link));
            for(i=0;i<n;i++)
            {
                v[i].clear();//细节决定成败
            }
            while(n--)
            {
                scanf("%d:(%d)",&a,&b);//以前一直用cin  这个还真nb
                while(b--)
                {
                    cin>>t;
                    v[a].push_back(t);
                    v[t].push_back(a);//补全二分图
    
                }
            }
            count=0;
            for(i=0;i<k;i++)
            {
                memset(used,0,sizeof(used));
                if(Dfs(i))
                  count++;
            }
            cout<<count/2<<endl;//因为遍历所有的点  多了一半
        }
        return 0;
    }
    

      

       

  • 相关阅读:
    (7)排序之归并排序
    (5)排序之简单选择排序
    (4)排序之希尔排序
    (3)排序之直接插入排序
    (2)排序之快速排序
    (1)排序之冒泡排序
    Python学习
    centos下docker网络桥接
    docker下搭建gitlab
    centos版本7以上网卡名修改
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2257745.html
Copyright © 2020-2023  润新知