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;
}
时间: 2024-10-07 15:46:19

HDU-3729 二分匹配 匈牙利算法的相关文章

HDU 3729 二分匹配匈牙利算法

I'm Telling the Truth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1482    Accepted Submission(s): 740 Problem Description After this year’s college-entrance exam, the teacher did a survey in

【I&#39;m Telling the Truth】【HDU - 3729】 【匈牙利算法,DFS】

思路 题意:该题主要说几个同学分别说出自己的名次所处区间,最后输出可能存在的未说谎的人数及对应的学生编号,而且要求字典序最大. 思路:刚刚接触匈牙利算法,了解的还不太清楚,附一个专门讲解匈牙利算法的博文,个人认为讲的比较清晰. AC代码 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int T, n; struct Stue { int l, r; }; Stue p

【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students

http://acm.hdu.edu.cn/showproblem.php?pid=2444 [DFS染色] 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<cmath> 6 #include<algorithm> 7 8 using namespace std; 9 const int maxn=2e2

HDU 1068 Girls and Boys(二分匹配--匈牙利算法)

Problem Description the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically involved" is defined between one girl and one boy. For the study reasons it is necessary to

最大二分匹配匈牙利算法的python实现

二分图匹配是很常见的算法问题,一般用匈牙利算法解决二分图最大匹配问题,但是目前网上绝大多数都是C/C++实现版本,没有python版本,于是就用python实现了一下深度优先的匈牙利算法,本文使用的是递归的方式以便于理解,然而迭代的方式会更好,各位可以自行实现. 1.二分图.最大匹配 什么是二分图:二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(

hdu 2063 (二分匹配 匈牙利算法)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 22693    Accepted Submission(s): 9797 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

hihocoder 1122最大二分匹配匈牙利算法

#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <cmath> #include <cstring> #include <stack> #include <set> #include <map> #include <vector> using namespace st

HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 49    Accepted Submission(s): 14 Problem Description There is a kindom of obsession, so people in this kingdom do things very

Hdu 2389 二分匹配

题目链接 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Others)Total Submission(s): 2644    Accepted Submission(s): 823 Problem Description You’re giving a party in the garden of your villa by the sea. T