zoukankan      html  css  js  c++  java
  • HDU-3729 二分匹配 匈牙利算法

    题目大意:学生给出其成绩区间,但可能出现矛盾情况,找出合理组合使没有说谎的人尽可能多,并按maximum lexicographic规则输出组合。

    //用学生去和成绩匹配,成绩区间就是学生可以匹配的成绩
    
    #include <iostream>
    #include <queue>
    #include <vector>
    #define N 100005
    
    using namespace std;
    struct Node
    {
        int f,t;
    };
    Node lis[65];
    int match[N];
    int used[N];
    bool dfs(int now)
    {
        //used[now]=1;
        for(int i=lis[now].f;i<=lis[now].t;i++)
        {
            if(!used[i])
            {
                used[i]=1;
                if(match[i]==-1||dfs(match[i]))
                {
                    match[i]=now;
                    return true;
                }
            }
        }
        return false;
    }
    void ini()
    {
        fill(used,used+N,0);
        fill(match,match+N,-1);
    }
    int main(int argc, const char * argv[]) {
        cin.sync_with_stdio(false);
        int t;
        cin>>t;
        while(t--)
        {
            int n;
            cin>>n;
            for(int i=0;i<n;i++)
                cin>>lis[i].f>>lis[i].t;
            int ans=0;
            ini();
            for(int i=n-1;i>=0;i--)//从n向前遍历,保证尽可能得到大的值
            {
                fill(used,used+N,0);
                if(dfs(i))
                    ans++;
            }
            cout<<ans<<endl;
            priority_queue<int,vector<int>,greater<int> >q;//顺序输出
            //int flag=1;
            for(int i=N-1;i>=0;i--)
                if(match[i]!=-1)
                    q.push(match[i]+1);
            while(!q.empty())
            {
                if(q.size()!=1)
                    cout<<q.top()<<' ';
                else
                    cout<<q.top()<<endl;
                q.pop();
            }
        }
        return 0;
    }
  • 相关阅读:
    Qt之json解析
    ListView
    JAVA的文件操作【转】
    可以随着SeekBar滑块滑动显示的Demo
    Android 之Buletooth
    VC++之运算符重载简单小结
    Android之Audio和Video
    Android之内容提供者ContentProvider的总结
    Android之Intent
    Android之Activity小结
  • 原文地址:https://www.cnblogs.com/LukeStepByStep/p/5813061.html
Copyright © 2011-2022 走看看