[JOI2017春季合宿]Port Facility[set、二分图]

题意

你有两个栈,有 (n) 个货物,每个货物有一个进栈时间和出栈时间(所有时间的并集是1~2n),问有多少种不同的入栈方案。

(nle 10^6)

分析

  • 把每个货物的存在看成区间,相交的区间不能在同一个栈中。这样就有了 (O(n^2)) 连边的方式,再用二分图染色判断一下是否合法即可。合法方案数就是 (2^{连通块个数})
  • 考虑将所有区间按照左端点排序,用一个 set 维护和当前区间相交的区间。由于不能出现三元环所以所有和当前区间相交的区间都是包含关系,这种包含区间之间形成了树形结构,每个区间记录其父亲。只需要保留右端点最小的那一个(可能之后会变成其父亲),剩余的用另一种边表示这些区间的颜色相同。保留的区间在之后的包含关系中一定作为最大的出现。
  • 复杂度 (O(nlogn))

代码

代码链接

原文地址:https://www.cnblogs.com/yqgAKIOI/p/10389182.html