zoukankan      html  css  js  c++  java
  • Codeforces Round #664 (Div. 1)(E未做)

    A

    枚举选择(a_ile m)的个数,然后贪心选择(a_i>m)的部分

    B

    先写个垃圾做法

    对于({c}),每个点有唯一出边,若合法则每个点都在一个简单环内,即每个点的后继节点均不相同
    对于(vin V)((u,v)in E),令(deg_u=k),有确定的(c_k)可以使((u,v))生效,找到(v)的生效集合,集合内不能同时出现两个
    那么可以找到(ban_{i,j,i_0,j_0}),表示不能同时出现(c_i=i_0,c_j=j_0)
    不过不能两两枚举((u,v)in E),得去重,有个细节是若集合同时存在(c_i=i_0,c_i=i_0),不能出现(c_i=i_0),得在去重前处理掉
    (O(mlogm+k^2n))(O(km+k^2n)),取决于去重的算法

    最后爆搜({c})(O(k!k))
    (O(mlogm+k^2n+k!k))

    官方题解:
    合法的充要条件为:对于(c_i=i0),可以找到后继集合,({c})的后继集合=({1,2,cdots,n}),可以用hash判断
    (O(km+k!))

    C

    做法跟官方题解不大一样,可能本质是相同的。感觉没有2600的难度...

    将B和N的个数描述成二元组((A,B))
    对于S((A,B)),T((C,D))

    • (Cle A,Dle B),最小操作为(max(A-C,B-D))
    • (Cge A,Dge B),最小操作为(max(C-A,D-B))
    • (Cle A,Dge B),最小操作为(A-C+D-B)
    • (Cge A,Dle B),最小操作为(C-A+B-D)

    分开讨论会更复杂,一般化的处理:最小操作未(max(A-C,B-D,C-A,D-B,A-C+D-B,C-A+B-D))
    可能可以分段做到线性,但会比较麻烦

    我们二分最小操作次数(mid),即判断(max(A-C,B-D,C-A,D-B,A-C+D-B,C-A+B-D)le mid)
    可以得到(x_0le Cle y_0,x_1le Dle y_1,x_2le C-Dle y_2)
    可行性很简单判断,有个细节就是(C,D)不能同时为(0)

    D

    对于每条边都定向的情况,(ans=sum min(in_i,out_i)cdot t_i)
    对于((u,v)in E,h_u=h_v)的情况要考虑定向的情况

    那么对于((u,v)in E,h_u=h_v),图形成了若干个森林,分别考虑
    (p_u)(u)的父亲,令(f_u)(p_ulongrightarrow u)的最小值,(g_u)(ulongrightarrow p_u)的最小值
    对于(f_u),可以通过枚举儿子节点有多少个(son_ilongrightarrow u)贪心得到

    E

  • 相关阅读:
    webpack
    Js数组和字符串常用方法
    Vue.js 2.0 快速上手
    雅虎前端优化的35条军规
    前端问题大杂烩
    Java和js的区别,以及Java和c的区别
    前后端联调
    99%的人都理解错了HTTP中GET与POST的区别
    vue项目目录
    vuex入门
  • 原文地址:https://www.cnblogs.com/Grice/p/13494339.html
Copyright © 2011-2022 走看看