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 且最大更容易满足条件。

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

const int MAXN=200010;
int n;
struct wy{int x,y,id;}t[MAXN];
int p[MAXN],a[MAXN],b[MAXN],w[MAXN];
multiset<pii>s;
multiset<pii>::iterator it;
int sum[MAXN<<2];
inline int cmp(wy a,wy b){return a.x<b.x;}
inline int ask(int p,int l,int r,int L)
{
if(L<=l)return sum[p];
int mid=(l+r)>>1;
if(L>mid)return ask(yy,mid+1,r,L);
return max(ask(zz,l,mid,L),ask(yy,mid+1,r,L));
}
inline void change(int p,int l,int r,int x,int w)
{
if(l==r){sum(p)=max(sum(p),w);return;}
int mid=(l+r)>>1;
if(x<=mid)change(zz,l,mid,x,w);
else change(yy,mid+1,r,x,w);
sum(p)=max(sum(zz),sum(yy));
return;
}
signed main()
{
freopen("1.in","r",stdin);
get(n);
rep(1,n,i)get(a[i]),get(b[i]),t[i]=(wy){a[i],b[i],i};
sort(t+1,t+1+n,cmp);
int flag=0;
rep(1,n,i)
{
while(flag+1<=n&&t[flag+1].x==i)
{
s.insert(mk(t[flag+1].y,t[flag+1].id));
++flag;
}
it=s.begin();
p[(*it).S]=i;
w[i]=(*it).S;
s.erase(it);
}
rep(1,n,i)
{
int ww=ask(1,1,n,i);
if(ww>=a[w[i]])
{
puts("NO");
rep(1,n,j)put_(p[j]);
puts("");
swap(p[w[ww]],p[w[i]]);
rep(1,n,j)put_(p[j]);
return 0;
}
change(1,1,n,b[w[i]],i);
}
puts("YES");
rep(1,n,j)put_(p[j]);
return 0;
}

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. HTML5(五)Geolocation

    HTML5 Geolocation 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. 注意 ...

  2. POJ3262贪心

    题意:FJ去砍树,然后和平时一样留了 N (2 ≤ N ≤ 100,000)头牛吃草.当他回来的时候,他发现奶牛们正在津津有味地吃着FJ种的美丽的花!为了减少后续伤害,FJ决定立即采取行动:运输每头牛 ...

  3. 【第五空间智能安全大赛】hate_php WriteUp

    环境:https://www.ctfhub.com/#/challenge 打开题目可以看到源码: 阅读源码发现过滤掉了f l a g . p h / ; " ' ` | [ ] _ =这些 ...

  4. Django---drf入门

    目录 1 web开发模式 2 api接口 3 postman的使用 4 Restful规范(重点) 5 drf的安装和简单使用 3 cbv源码 4 APIView源码分析 1 web开发模式 #前后端 ...

  5. Django---进阶16<XSS攻击>

    目录 后台管理 添加文章 kindeditor富文本编辑器 编辑器上传图片 修改用户头像 bbs项目总结 后台管理 """ 当一个文件夹下文件比较多的时候 你还可以继续创 ...

  6. 央行数字货币(CBDCs)的互操作性至关重要

    CBDCs(央行数字货币)将在我们的有生之年产生重大的金融转变.然而,除非这些工具吸取了法定货币的教训,否则创新将毫无意义.互操作性一直是影响CBDC采用和功能的最重要障碍之一.因此,各国央行在这一理 ...

  7. day06 可变不可变类型

    1.可变不可变类型 可变类型 定义:值改变,id不变,改的是原值 不可变类型 定义:值改变,id也变了,证明是产生了新的值没有改变原值 验证 x = 10 print(id(x)) x = 11 pr ...

  8. 03 flask源码剖析之threading.local和高级

    03 threading.local和高级 目录 03 threading.local和高级 1.python之threading.local 2. 线程唯一标识 3. 自定义threading.lo ...

  9. Elasticsearch恢复备份的数据

    1.恢复备份好的snapshot 1.1恢复snapshot_1下的所有index POST _snapshot/my_backup/snapshot_1/_restore 1.2恢复snapshot ...

  10. 没错,用三方 Github 做授权登录就是这么简单!(OAuth2.0实战)

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享. 上一篇<OAuth2.0 的四种授权方式>文末说过,后续要来一波OAuth2.0实战,耽误了几天今儿终于补上了. ...