题意:可以录取x个学生,t<=x<=T。将学生分成两组,大小分别为n1,n2。一共有n个老师需要分进这两个组里,有m对老师互相讨厌不能同组,每个老师都对其所在组的大小有[li,ri]的限制。求一种学生和老师的合法分配方案。li,ri<=1e9,n,m<=1e5.

标程:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=100005;
 4 int t,T,n,m,c[N],n1,n2,l[N],r[N],x,y;
 5 vector<int> vec[N];
 6 void fail(){puts("IMPOSSIBLE");exit(0);}
 7 void dfs(int x,int col)
 8 {
 9     if (c[x])
10       if (c[x]==col) return;else fail();
11     c[x]=col;
12     for (int i=0;i<vec[x].size();i++) dfs(vec[x][i],3-col);
13 }
14 bool in(int i,int x) {return l[i]<=x&&x<=r[i];}
15 int main()
16 {
17     scanf("%d%d",&t,&T);
18     scanf("%d%d",&n,&m);n1=1e9;
19     for (int i=1;i<=n;i++) scanf("%d%d",&l[i],&r[i]),n1=min(n1,r[i]),n2=max(n2,l[i]);
20     for (int i=1;i<=m;i++) scanf("%d%d",&x,&y),vec[x].push_back(y),vec[y].push_back(x);
21     if (n1+n2<t) n2=t-n1;
22     else if (n1+n2>T) n1=T-n2;
23     if (n1<0||n2<0) fail();
24     for (int i=1;i<=n;i++)
25       if (in(i,n1))
26       {
27             if (!in(i,n2)) dfs(i,1);
28       }else if (in(i,n2)) dfs(i,2);
29       else fail();
30     for (int i=1;i<=n;i++) if (!c[i]) dfs(i,1);
31     printf("POSSIBLE\n%d %d\n",n1,n2);
32     for (int i=1;i<=n;i++) printf("%d",c[i]);
33     puts("");
34     return 0;
35 } 

题解:二分图染色

回忆一下分成两组有什么算法:匹配、染色、2-sat……

这里有不等式限制2-sat和匹配显然都不合适。

化简不等式:有n1或n2<=min(ri),max(li)<=n1或n2,可以证明n1,n2分别取两个限制不劣,设n1<=min(ri),max(li)<=n2。将这个限制和t<=n1+n2<=T的限制取交集。因而最后n1<=k1,n2>=k2,而如果有解k1,k2不变,故取n1=k1,n2=k2即可。

将老师的匹配区间根据n1和n2的限制二分图染色(厌恶连边),先确定只包含n1或n2的,再确定都包含的。

转载于:https://www.cnblogs.com/Scx117/p/9075154.html

CF538H Summer Dichotomy相关推荐

  1. [CF538H]Summer Dichotomy

    [CF538H]Summer Dichotomy 题目大意: ​ 将若干个学生分为两个班级\(S_1,S_2\),每个班的学生数分别为\(n_1,n_2\)(甚至可以没有学生,也可以没有老师).给出限 ...

  2. 训练3.21(C:Summer Dichotomy)

    训练3.21(C:Summer Dichotomy) cf538H 题目:http://code**forces.com/problemset/problem/538/H 题意:T个学生来报考,至少录 ...

  3. Definition of Dichotomy

    台大的线上课程,Machine Learning Foundations,对于Dichotomy的定义: 大家对此定义,是否感到困惑?式子左边有h,为何右边也有h? 这有点像是我们在念文言文,有许多字 ...

  4. 数据结构之Python实现二分法查找dichotomy

    """ 定义一个数组780 从里面查89 """def dichotomy(list, item):low = 0high = len(li ...

  5. 二分法查找(dichotomy)--python实现

    二分法原理及实现 二分法原理概述 python实现代码 二分法原理概述 简单粗暴一点理解二分法 将数据有序排列:先将一个数据集进行有序排列(可根据某种数值的大小降序或升序<当然排序的规则可根据业 ...

  6. Dichotomy二分法学习笔记

    二分法 二分法的特点 依赖于递归算法,逐次将区间长度减半,直至无限逼近所求点的方法. 算法的复杂度与区间长度,精度,待求点的位置分布有关 LeetCode 69 实现 int sqrt(int x) ...

  7. 【Codeforces 538 H】Summer Dichotomy(二分图染色)

    传送门 显然是不能在一起的连边后二分图染色 似乎可以直接用setsetset维护一下可行的点染色 不过更简单的是 如果有三个[li,ri][l_i,r_i][li​,ri​]互相不交显然无解 可以得到 ...

  8. Dichotomy(递+非递)

    输入:先输入进行二分搜索元素的个数,然后按大小依次输入(或随机生成,然后排序)每个数字,最后输入要求搜索的元素. 输出:要求搜索元素的下标(下标从0开始!). 示例:输入:61 5 5 9 6 9 6 ...

  9. Dichotomy专栏:Leetcode:#33 搜索旋转排序数组

    Question: 整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ...

最新文章

  1. 本、硕、博的最大区别是什么?
  2. java字节流6_JavaIO流之字节流
  3. 国产AI框架再进化!百度Paddle Lite发布:率先支持华为NPU在线编译,全新架构更多硬件支持...
  4. matlab中并行用不了,请教matlab在linux下的并行问题 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  5. PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8192 bytes)
  6. PowerShell与Unix Shell对比:八大实例
  7. phpmyadmin 导出mysql,在phpmyadmin中导入/导出非常大的mysql数据库
  8. kafka java获取topic_通过编程方式获取Kafka中Topic的Metadata信息
  9. 10双屏鼠标过不去_灵耀X2 Duo双屏笔记本是怎样“炼”成的?对话华硕笔记本设计团队...
  10. FreeTextBox使用详解
  11. IOS开发UI控件UIScrollView和Delegate的使用
  12. 床长人工智能教程 - 目录
  13. MKV(Matroska)常见问题浅析
  14. python-selenium 自动化弹幕
  15. 哈曼推出Savari MECWAVE:超低时延边缘计算平台提供交钥匙式互联服务
  16. photoshop 快捷键学习笔记
  17. nyoj-506-洗澡
  18. gvim常用命令行大全
  19. 快准狠的数据挖掘分析,用了这些方法!复旦 Zilliz 梦幻联动
  20. Elemrnt UI DatePicker日期选择器(格式、限定日期),周选择器

热门文章

  1. 用python提取word到excel(excel可更新)
  2. 语言模型及RNN模型
  3. img 获取二次元图片地址
  4. 利用python进行数据分析(第二版)_第十三章
  5. 一致性算法之Raft算法
  6. 读博太孤独?你不是一个人!
  7. 火狐浏览器怎么录制屏幕_轻松获取Firefox中的屏幕截图
  8. 弘辽科技:拼多多高客单价怎么改低价格提升?
  9. 制作指定比例尺的专题地图
  10. 12星座经典情爱语录