题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3729

I'm Telling the Truth

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1700    Accepted Submission(s):
853

Problem Description
After this year’s college-entrance exam, the teacher
did a survey in his class on students’ score. There are n students in the class.
The students didn’t want to tell their teacher their exact score; they only told
their teacher their rank in the province (in the form of
intervals).

After asking all the students, the teacher found that some
students didn’t tell the truth. For example, Student1 said he was between 5004th
and 5005th, Student2 said he was between 5005th and 5006th, Student3 said he was
between 5004th and 5006th, Student4 said he was between 5004th and 5006th, too.
This situation is obviously impossible. So at least one told a lie. Because the
teacher thinks most of his students are honest, he wants to know how many
students told the truth at most.

 
Input
There is an integer in the first line, represents the
number of cases (at most 100 cases). In the first line of every case, an integer
n (n <= 60) represents the number of students. In the next n lines of every
case, there are 2 numbers in each line, Xi and Yi (1 <=
Xi <= Yi <= 100000), means the i-th student’s rank
is between Xi and Yi, inclusive.

 
Output
Output 2 lines for every case. Output a single number
in the first line, which means the number of students who told the truth at
most. In the second line, output the students who tell the truth, separated by a
space. Please note that there are no spaces at the head or tail of each line. If
there are more than one way, output the list with maximum lexicographic. (In the
example above, 1 2 3;1 2 4;1 3 4;2 3 4 are all OK, and 2 3 4 with maximum
lexicographic)
 
Sample Input
2
4
5004 5005
5005 5006
5004 5006
5004 5006
7
4 5
2 3
1 2
2 2
4 4
2 3
3 4
 
Sample Output
3
2 3 4
5
1 3 5 6 7
 
Source
 
 
题目大意:每个人说一个自己成绩排名的区间,但是根据他们所说的会产生矛盾。现在给你一个任务,要你来判断到底谁说的是正确的!输出说真话人的数量以及说真话的人的序号。
解题思路:我们可以把区间的左部分看做是二分图的左枝,区间的右部分看做是二分图的右枝。
特别注意:输出是有要求的,有很多种情况的时候,输出最大的字典序。
 
详见代码。
 #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int n;
int ok[+],vis[+],as[+];
struct node{
int x,y;
}s[];
int num[+]; bool Find(int x)
{
for (int i=s[x].x;i<=s[x].y;i++)
{
if (!vis[i])
{
vis[i]=;
if (!ok[i])
{
as[x]=;
ok[i]=x;
return true;
}
else
{
if (Find(ok[i]))
{
as[x]=;
ok[i]=x;
return true;
}
}
}
}
return false;
} int main()
{
int T;
int x,y; scanf("%d",&T);
while (T--)
{
int k=;
scanf("%d",&n);
memset(as,,sizeof(as));
memset(ok,,sizeof(ok));
int ans=;
for (int i=;i<=n;i++)
{
scanf("%d%d",&s[i].x,&s[i].y);
}
for (int i=n;i>;i--)
{
memset(vis,,sizeof(vis));
if (Find(i))
ans++;
}
printf ("%d\n",ans);
for (int i=n;i>=;i--)
{
if (as[i]==)
{
num[k++]=i;
//cout<<num[k-1]<<endl;
}
}
for (int i=k-;i>;i--)
printf ("%d ",num[i]);
printf ("%d\n",num[]);
}
return ;
}

hdu 3729 I'm Telling the Truth(二分匹配_ 匈牙利算法)的更多相关文章

  1. HDU 3729 I'm Telling the Truth (二分匹配)

    题意:给定 n 个人成绩排名区间,然后问你最多有多少人成绩是真实的. 析:真是没想到二分匹配,....后来看到,一下子就明白了,原来是水题,二分匹配,只要把每个人和他对应的区间连起来就好,跑一次二分匹 ...

  2. hdu 1498 50 years, 50 colors(二分匹配_匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1498 50 years, 50 colors Time Limit: 2000/1000 MS (Ja ...

  3. hdu 3729 I'm Telling the Truth 二分图匹配

    裸的二分图匹配.需要输出方案. #include<cstdio> #include<cstring> #include<vector> #include<al ...

  4. HDU 2389 Rain on your Parade(二分匹配,Hopcroft-Carp算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

  5. HDU 2063:过山车(偶匹配,匈牙利算法)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  6. HDU - 3729 I'm Telling the Truth(二分匹配)

    题意:有n个人,每个人给出自己的名次区间,问最多有多少个人没撒谎,如果有多解,输出字典序最大的解. 分析: 1.因为字典序最大,所以从后往前分析. 2.假设后面的人没说谎,并将此作为已知条件,然后从后 ...

  7. hdu 2063 过山车 二分匹配(匈牙利算法)

    简单题hdu2063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Ot ...

  8. HDU 1150:Machine Schedule(二分匹配,匈牙利算法)

    Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. hdu2063 最大二分匹配(匈牙利算法)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

随机推荐

  1. mysql项目路径URL编码

    jdbc_url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncodi ...

  2. iOS 关于MVC和MVVM设计模式的那些事

    一.概述 在 iOS 开发中,MVC(Model View Controller)是构建iOS App的标准模式,是苹果推荐的一个用来组织代码的权威范式.Apple甚至是这么说的.在MVC下,所有的对 ...

  3. solr源码分析之solrclound

    一.简介 SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布式搜索方案.SolrCloud是Solr的基于Zookeeper一种部署方式.Solr可以以多种方式部署,例如 ...

  4. 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  5. 【题解】APIO2014回文串

    哇哦~想不到我有生之年竟然能够做出字符串的题目ヾ(✿゚▽゚)ノ虽然这题比较裸但依然灰常开心! 首先有一个棒棒的性质:本质不同的回文串最多有 O(n) 个.首先 manacher 把它们都找出来,然后问 ...

  6. linux内核分析 第三周 构造一个简单的Linux系统MenuOS

    一.计算机的三个法宝 存储程序计算机,函数调用堆栈,中断二.操作系统的两把剑:1.中断上下文的切换,保存现场和恢复现场2.进程上下文的切换. 三.linux内核源代码的分析: ·arch/目录保存支持 ...

  7. 【bzoj3295】动态逆序对

    Portal --> bzoj3295 Solution 虽然说这个可能原本是一道愉快的树套树但是 ​ 没有强制在线并且是三维限制那就大力cdq分治啊! ​ 看到"按照某个顺序依次删除 ...

  8. webstorm下搭建编译less环境 以及设置压缩css

    webstorm自带less,不过要编译的话需要nodejs环境. 首先去node的主页下载对应版本的nodejs然后安装,下载地址:http://nodejs.org/ 安装完之后打开命令提示符(w ...

  9. UESTC--1727

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1727 分析:用 l[i] 记录第 i 层楼有多少物品需要往上继续搬运,如果某层楼没有物品,但是更上面还有, ...

  10. Qt ------ 获取 wifi 信息

    QProcess:可以调用外部进程 netsh wlan show interfaces:可以查看连接哪个wifi netsh wlan show networks:显示所有可用的wifi netsh ...