题意:

给定 n个学生 说的 自己 考试排名的 可能范围

确定最多几个人说真话

如果有多种答案,输出字典序最大的那种( 要求字典序最大,所以solve中从最大字典序开始匹配)

思路:

题目给定  点 映射到 数轴的区间 上, 问最多多少点可以成功映射到数轴上

很显然  点就是 x集  , 整个数轴 就是 y集 , 点对应的整个区间就是映射的边 ,所以直接有了一个二分图

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std; #define N 100100
#define M 65
struct node{
int x,y;
}len[M];
int n; int lef[N],match[M];
bool vis[N];
bool dfs(int x){ for(int i=len[x].x; i<= len[x].y; i++){
if(!vis[i])
{
vis[i] = true;
if(lef[i] == -1 || dfs(lef[i])) {
lef[i] = x;
match[x] = i;
return true;
}
}
}
return false;
}
int solve(){
memset(lef, -1, sizeof(lef));
memset(match,-1,sizeof(match));
int ans = 0;
for(int i = n-1 ; i >= 0; i-- ){
memset(vis,0,sizeof(vis));
ans += dfs(i);
}
return ans;
}
int main(){
int i,T;scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d %d",&len[i].x,&len[i].y);
int ans = solve();
printf("%d\n",ans);
for(i=0;i<n;i++)
if(match[i] != -1){
ans--;
printf("%d",i+1);
if(ans)printf(" ");
else printf("\n");
} }
return 0;
}

HDU 3729 二分匹配 反向匹配的更多相关文章

  1. POJ 2289 Jamie's Contact Groups / UVA 1345 Jamie's Contact Groups / ZOJ 2399 Jamie's Contact Groups / HDU 1699 Jamie's Contact Groups / SCU 1996 Jamie's Contact Groups (二分,二分图匹配)

    POJ 2289 Jamie's Contact Groups / UVA 1345 Jamie's Contact Groups / ZOJ 2399 Jamie's Contact Groups ...

  2. 二分图带权匹配、最佳匹配与KM算法

    ---------------------以上转自ByVoid神牛博客,并有所省略. [二分图带权匹配与最佳匹配] 什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和 ...

  3. 二分图带权匹配 KM算法与费用流模型建立

    [二分图带权匹配与最佳匹配] 什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小.而二分图的最佳匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大 ...

  4. HDU 3729 I&#39;m Telling the Truth(二部图最大匹配+结果输出)

    职务地址:HDU 3729 二分图最大匹配+按字典序输出结果. 仅仅要从数字大的開始匹配就能够保证字典序最大了.群里有人问. . 就顺手写了这题. . 代码例如以下: #include <ios ...

  5. hdu 4024 二分

    转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html   一种是直接根据公式计算的,另外一种是二分算出来的.两种方法速度 ...

  6. 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替

    /// <summary> /// 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替换 /// </summary&g ...

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

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

  8. hdu 3729 I'm Telling the Truth(二分匹配_ 匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3729 I'm Telling the Truth Time Limit: 2000/1000 MS ( ...

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

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

随机推荐

  1. 详解Spring中的CharacterEncodingFilter--forceEncoding为true在java代码中设置失效--html设置编码无效

    在项目中有很多让人头疼的问题,其中,编码问题位列其一,那么在Spring框架中是如何解决从页面传来的字符串的编码问题的呢?下面我们来看看Spring框架给我们提供过滤器CharacterEncodin ...

  2. 达内TTS6.0课件oop_day01

  3. 自学JavaScript的几个例子

    学习了广泛使用的浏览器脚本JavaScript和HTML的DOM模型(也是用JavaScript实现),下面给出两个自己学习时的例子,具体JavaScript语法请参考W3C相关网页(http://w ...

  4. select2插件常用方法汇总

    1.获取下拉框的value和text <input type="hidden" name="xa" id="xa" data-plac ...

  5. CentOS6.3下安装配置SVN(Subversion)

    #检查是否安装了低版本的SVN [root@localhost ~]# rpm -qa subversion subversion--.el6.x86_64 #卸载旧版本SVN [root@local ...

  6. errorPlacement的位置问题

    做一个前端的验证,使用了JQUERY.Validate 在errorPlacement上纠结了半天: 百度大多数都是一个答案: errorPlacement: function(error, elem ...

  7. 大数据之scala高级语法学习

    协变 案例一: class Animal {} class Bird extends Animal {} class Animal {} class Bird extends Animal {} // ...

  8. BZOJ 1491: [NOI2007]社交网络( floyd )

    floyd...求最短路时顺便求出路径数. 时间复杂度O(N^3) ------------------------------------------------------------------ ...

  9. [非技术参考]C# Socket网络编程

    我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: 1. TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一 ...

  10. Hive操作之HQL语句

    HQL操作1.Distribute by    distribute by col按照col列把数据分散到不同的reduce    sort    sort by col 按照col列把数据排序    ...