zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

       

  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2257745.html
Copyright © 2011-2022 走看看