6月题目汇总1(6.6---6.13)

6.6上午

NO.1 来源 : UVa 1318 Monster Trap

分类: 计算几何,平面直线图
简要题解:
  • 首先从所有线段的端点中出不在任何一条线段(端点不算)上的点的集合S,再加上 (0,0),(inf,inf) 这两个点。
  • 对于 S 中的两个点a,b,如果线段 a,b 不和任何给出的线段相交,那么给 a,b 连上边。
  • 但这样会在线段的公共端点处出现问题,解决的方案是把每条线段延长一点点,使原先有公共端点的线段相交。
  • BFS判断 (0,0)(inf,inf) 是否联通即可。
反思:
  • 注意伸长量 deltaeps 的大小关系,取 delta=105,eps=1010 可以过。
  • 复习:判断线段相交,点在线段上。

6.6晚

NO.2 来源 : UVa 1340 Find the Border

分类: 计算几何,平面直线图(PSLG)
简要题解:
  • PSLG模板。题解请看LRJ的白皮书。
反思:
  • 对点进行排序时的浮点比较要用dcmp()。

6.8上午

NO.3 来源 : BZOJ 4184 shallot

分类: 分治,线性基
简要题解:
  • 求一堆数可以异或出来的最大值,显然可以用线性基。
  • 有删除操作怎么办?对时间进行分治,具体来说:
    • 用一个类似线段树的结构,每个节点用一个vector存下对这个整个区间有贡献的数。
    • 最后遍历这棵树,走到叶子节点就可以回答对应的询问。
    • 线性基要当参数逐层传递,不能用一个全局变量。
反思:
  • Hash大法好(比stl快至少一倍)。
  • 但是要维护的东西比较麻烦(不像线性基可以当参数传递怎么办)?

6.8上午

NO.4 NKOJ 4140 ces

分类: 无向图的连通性
简要题解:
  • 先考虑 k=1 的情况
    • 如果是一棵树,那么答案就是直径的长度。
    • 否则,将环缩成一个点之后形成的新的树的直径。
  • 取新树的重心,可以保证树高为 logn 级别。
  • 显然加入一条边可以使某条路径上的边全部变成不是桥,肯定贪心的选择最长的路径。
  • 用一个堆维护所有的由桥边构成的单链(为了避免重复计算,路径应该被拆解成为单链)。
反思:
  • 从树到图的桥梁——把环缩成点(也就是选代表节点,可以用并查集实现)。
  • k=1 到一般情形的转化——贪心+巧妙的讨论和维护路径。

6.8上午

NO.5 来源 : Codeforces Round #418 (Div. 2) E - An unavoidable detour for home

分类: dp,组合数学
简要题解:
  • 可以发现最后的图一定形成类似树的结构,只不过同层之间可以连边。
  • 考虑逐步加入一个点 x (已经有x1个点),设当前的层数为 l :
    • 如果l1这一层还有多余的度数, x 号点必须接在l1层的点下面,否则可以另起一层。
    • f(x,p1,p2,c1,c2) 表示加入 x 个点,l1层上剩余1度、2度的点分别有 p1,p2 个, l 层上剩余1度、2度的点分别有c1,c2个的方案数。
      • 答案为 f(n,0,0,0,0) ,时间复杂度 O(n5)
    • 反思:
      • 转移比较多,每一种考虑清楚。特别是另起一层的时候容易错

      6.10上午

      NO.6 来源 : BZOJ 4205 卡牌游戏

      分类:网络流
      简要题解:
      • 暴力构图+匈牙利算法复杂度可以得到35分.
      • 考虑到按照匹配建图边数过多,我们采用将边分类的方法优化。
        • 考虑a项属性值能被x整除且b项能力值能被y整除的所有点,只要是在两侧一定能够匹配,所以我们在匹配的网络流模型中间增加一排这样的点,满足要求的左右点分别与它相连,边权为正无穷。
        • 考虑到x和y只需是质数,这样的点共有至多3*46*46个(1~200质数共46个),而200<2*3*5*7,所以两侧每个点至多连出3*3*3条边。
        • 于是我们构成了一个70000个点,2000000条边的网络流,依然是分层图,所以dinic有极佳的速度优势,通过100分数据。
      反思:
      • 找到题目和最大匹配的相同性,利用特殊性来优化。
      • 匹配在网络流上的表达就是两行点联通。

      6.10下午

      NO.7 来源 : BZOJ 4206 最大团

      分类:计算几何,区间问题
      简要题解:
      • 对于每一个点,向圆作两条切线,切点之间的弧可以用一个极角区间 [li,ri] 来表示。
      • 两个点 i,j 可以连边等价于 [li,ri][lj,rj] 相交并且不包含。
      • 对极角区间排序之后,考虑从每一个点 i 开始 in 能组成的最大团:
        • 对每一个满足 lj[li,ri]rj>ri j (i<jn) ,将 rj 加入队列Q。
        • 求Q的最长上升子序列即可。
      反思:
      • 如果采用到圆心的距离作为连边的判断依据,就不能转化为区间的问题,也没有很好的利用题目条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值