题目链接: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. js 实现路由功能

    class Router { constructor() { this.routes = [] } handle(pattern, handler) { this.routes.push({ patt ...

  2. Mysql中关键词执行顺序

    MySQL的语句执行顺序 MySQL的语句一共分为11步,最先执行的总是FROM操作,最后执行的是LIMIT操作.其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对 ...

  3. 第168天:json对象和字符串的相互转换

    json对象和字符串的相互转换 1.json对象和字符串的转换 在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和pa ...

  4. canvas - 简单的神经网络

    1.国际惯例,先上效果图 一下效果图使用三次贝塞尔曲线进行连线,代码中有直接使用直线连线的代码,可直使用. 2.查看演示请看 这里. 3 代码     html: <canvas id=&quo ...

  5. 【三】shiro入门 之 Realm

    Realm:域,Shiro 从从Realm获取安全数据(如用户.角色.权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法:也 ...

  6. BZOJ3714 PA2014Kuglarz(最小生成树)

    每次询问所获得的可以看做是两个前缀和的异或.我们只要知道任意前缀和的异或就可以得到答案了.并且显然地,如果知道了a和b的异或及a和c的异或,也就知道了b和c的异或.所以一次询问可以看做是在两点间连边, ...

  7. Mybatis笔记五:Mybatis的全局配置文件Configuration.xml讲解

    从 XML 中构建 SqlSessionFactory 每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心.SqlSessionFactory实例可以由SqlSessio ...

  8. Docker学习笔记五:Docker生成jenkins容器,支持Java Web项目持续集成、持续部署

    一.创建jenkins容器: 1.拉取jeknin镜像 sudo docker pull jenkins 2.创建一个jenkins目录 sudo mkdir /jenkins 3.在jenkins目 ...

  9. 温习classList api

    有道题是一个removeClass的功能,代码里是正则分隔了传入的name,根据name的个数,循环移除掉,让寻找bug..看了了这几行代码,首先想到的是我会如何去优化. 如果看代码一两分钟就能找到公 ...

  10. 解题:ZJOI 2014 力

    题面 事实说明只会FFT板子是没有用的,还要把式子推成能用FFT/转化一下卷积的方式 虽然这个题不算难的多项式卷积 稍微化简一下可以发现实际是$q_i$和$\frac{1}{(i-j)^2}$在卷,然 ...