LINK:Phoenix and Memory

这场比赛标题好评 都是以凤凰这个单词开头的 有凤来仪吧.

其实和Hall定理关系不大。

不过这个定理有的时候会由于 先简述一下。

对于一张二分图 左边集合为S 右边集合为T 那么有完备匹配时 最大匹配数为 min(|S|,|T|).

这里不妨假设|S|<=|T|.

若存在完备匹配那么对于任意集合\(s\in S\)都有s连出的边>=|s|.

这个定理是一张二分图具有完备匹配的充分必要条件。

先证明必要性:如果不存在 那么一定有点无法匹配到。

再证明充分性:反证法,如果满足这个条件但是形不成完备匹配 考虑S中那个没有被匹配的点w w一定有向外发出的未匹配边 考虑如果这条边的另一端的点如果被匹配了 那么另外一端的点的对应匹配点 还应该有至少一条出边 一直往复

可以发现一定有增广路的存在。

这道题 可以看成一张二分图 保证有解那么必然满足Hall定理。(不过没什么用。

考虑先求出一个合法解 点匹配线段问题 考虑贪心。

将线段按照左端点进行排序后 逐步分配位置 当前位置必然要分配给右端点最近的那个 这样给后面的局面不会带来更差的结果。

考虑是否存在两组解或多组解。进一步分析有两组解的性质。

对比这两组解可以发现我们刚才求出的解 和 另外一组解 一些位置进行了互换 可以发现这是形成大小至少为2的置换.

考虑如果存在>2的置换那么必然最后一个点要连上它之前的点 可以发现 连上之前较近的点也是合法的。

所以不断进行规约 必然存在大小为2的置换 也就是说如果有多组解必然存在有两个位置上的数字交换位置就可以得到。

至此 需要求出 是否位置上的i,j可以进行换位 不妨假设 i<j 那么必然存在 aj<=i<j<=bi

考虑枚举j求出这样的一个i 在j~n处查询之前的所有bi 看他们的最大的i值即可 因为此时i必然<j 且最大更容易满足条件。

可以利用线段树解决这个问题。

  1. const int MAXN=200010;
  2. int n;
  3. struct wy{int x,y,id;}t[MAXN];
  4. int p[MAXN],a[MAXN],b[MAXN],w[MAXN];
  5. multiset<pii>s;
  6. multiset<pii>::iterator it;
  7. int sum[MAXN<<2];
  8. inline int cmp(wy a,wy b){return a.x<b.x;}
  9. inline int ask(int p,int l,int r,int L)
  10. {
  11. if(L<=l)return sum[p];
  12. int mid=(l+r)>>1;
  13. if(L>mid)return ask(yy,mid+1,r,L);
  14. return max(ask(zz,l,mid,L),ask(yy,mid+1,r,L));
  15. }
  16. inline void change(int p,int l,int r,int x,int w)
  17. {
  18. if(l==r){sum(p)=max(sum(p),w);return;}
  19. int mid=(l+r)>>1;
  20. if(x<=mid)change(zz,l,mid,x,w);
  21. else change(yy,mid+1,r,x,w);
  22. sum(p)=max(sum(zz),sum(yy));
  23. return;
  24. }
  25. signed main()
  26. {
  27. freopen("1.in","r",stdin);
  28. get(n);
  29. rep(1,n,i)get(a[i]),get(b[i]),t[i]=(wy){a[i],b[i],i};
  30. sort(t+1,t+1+n,cmp);
  31. int flag=0;
  32. rep(1,n,i)
  33. {
  34. while(flag+1<=n&&t[flag+1].x==i)
  35. {
  36. s.insert(mk(t[flag+1].y,t[flag+1].id));
  37. ++flag;
  38. }
  39. it=s.begin();
  40. p[(*it).S]=i;
  41. w[i]=(*it).S;
  42. s.erase(it);
  43. }
  44. rep(1,n,i)
  45. {
  46. int ww=ask(1,1,n,i);
  47. if(ww>=a[w[i]])
  48. {
  49. puts("NO");
  50. rep(1,n,j)put_(p[j]);
  51. puts("");
  52. swap(p[w[ww]],p[w[i]]);
  53. rep(1,n,j)put_(p[j]);
  54. return 0;
  55. }
  56. change(1,1,n,b[w[i]],i);
  57. }
  58. puts("YES");
  59. rep(1,n,j)put_(p[j]);
  60. return 0;
  61. }

CF R638 div2 F Phoenix and Memory 贪心 线段树 构造 Hall定理的更多相关文章

  1. cf 442 div2 F. Ann and Books(莫队算法)

    cf 442 div2 F. Ann and Books(莫队算法) 题意: \(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\) 每次查询区间\([l,r]内有多少对(i, ...

  2. BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库

    正解:贪心+线段树/set库 解题报告: 算辣直接甩链接qwq 恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明 (这里有个,很妙的想法,就是,从后往前推从前往后 ...

  3. 【题解】P1712 [NOI2016]区间(贪心+线段树)

    [题解]P1712 [NOI2016]区间(贪心+线段树) 一个observe是,对于一个合法的方案,将其线段长度按照从大到小排序后,他极差的来源是第一个和最后一个.或者说,读入的线段按照长度分类后, ...

  4. Codeforces 626G Raffles(贪心+线段树)

    G. Raffles time limit per test:5 seconds memory limit per test:256 megabytes input:standard input ou ...

  5. poj 2010 Moo University - Financial Aid (贪心+线段树)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 骗一下访问量.... 题意大概是:从c个中选出n个 ...

  6. BZOJ 5249: [2018多省省队联测]IIIDX(贪心 + 线段树)

    题意 这一天,\(\mathrm{Konano}\) 接到了一个任务,他需要给正在制作中的游戏 \(\mathrm{<IIIDX>}\) 安排曲目 的解锁顺序.游戏内共有\(n\) 首曲目 ...

  7. [BZOJ4653][NOI2016]区间 贪心+线段树

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MB Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],. ...

  8. [九省联考2018]IIIDX 贪心 线段树

    ~~~题面~~~ 题解: 一开始翻网上题解看了好久都没看懂,感觉很多人都讲得不太详细,所以导致一些细节的地方看不懂,所以这里就写详细一点吧,如果有不对的or不懂的可以发评论在下面. 首先有一个比较明显 ...

  9. [bzoj4391] [Usaco2015 dec]High Card Low Card 贪心 线段树

    ---题面--- 题解: 观察到以决策点为分界线,以点数大的赢为比较方式的游戏都是它的前缀,反之以点数小的赢为比较方式的都是它的后缀,也就是答案是由两段答案拼凑起来的. 如果不考虑判断胜负的条件的变化 ...

随机推荐

  1. ie浏览器不支持多行隐藏显示省略号

    平时在写页面过程中,相信大家都遇到过文本显示多行后用省略号代替的问题,来看看代码: p{ display: -webkit-box; overflow: hidden; text-overflow: ...

  2. 状压DP之Bill的挑战

    题目 P2167 [SDOI2009]Bill的挑战 Sheng bill不仅有惊人的心算能力,还可以轻松地完成各种统计.在昨天的比赛中,你凭借优秀的程序与他打成了平局,这导致Sheng bill极度 ...

  3. 朋友HDU - 5963 (思维题) 三种方法

    传送门 题目描述 输入 输出 样例输入 Sample Input 样例输出 Boys win! Girls win! Girls win! Boys win! Girls win! Boys win! ...

  4. 攻防世界-新手篇(Mise)~~~

    Mise this_is_flag 签到题flag{th1s_!s_a_d4m0_4la9} pdf 打开图片,flag值在图片底下,wps将pdf转为word格式后,将图片拉开发现flag flag ...

  5. 我们现在的git版本管理

    1.git发布正式版都统一用master分支的代码发布2.每次开发下一版本的需求时,将master分支的代码打一个tag,版本号与后台一致3.需要紧急修复线上的bug时,从master分支拉一个分支出 ...

  6. Django之模型层第二篇:多表操作

    Django之模型层第二篇:多表操作 一 表关系回顾 ​ 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. ​ 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息 ...

  7. [BSidesCF 2020]Had a bad day

    [BSidesCF 2020]Had a bad day 测试 一些猫狗的图片加上url有传参,测试到文件包含时报错了. 使用php伪协议: php伪协议 php://fliter/read=conv ...

  8. A Broken Calculator 最详细的解题报告

    题目来源:A Broken Calculator 题目如下(链接有可能无法访问): A Broken Calculator Time limit : 2sec / Stack limit : 256M ...

  9. Python切图脚本

    背景: 时值疫情,作业需要在网上提交.最近老师改变了交作业方式,之前是提交完整的作业图片即可,现在需要将完整的作业图片切分成一题一题的提交,如果手动切分较麻烦,故本人写了个python脚本实现自动切分 ...

  10. 第十章:Android消息机制

    Android的消息机制主要是指Handler的云心机制,Handler的运行需要底层的MessageQueue和Looper支持. Handler是Android消息机制的上层接口. 通过Handl ...