zoukankan      html  css  js  c++  java
  • AtCoder Grand Contest 012 D Colorful Balls

    题意:

    有N个球排成一行,第i个球颜色为ci, 权为wi, 如果两个同色球权值和 <= X 则它们可以交换;

    如果两个异色球权值和 <= Y 则它们可以交换;不限制交换次数,求能到达的颜色序列有多少种。

    1<=n<=2e5;1<=x,y<=1e9;1<=ci<=n;1<=wi<=1e9

    分析:

    我们可以通过n^2的枚举,来枚举两个点是否可以交换,如果交换就连一条边

    那么最后会形成若干个连通块,那么每个连通块之间都是独立的,答案相乘;对于一个连通块内部,我们发现即使不是完全图,每两个节点之间也可以通过比较多的操作来交换,所以就相当于是一个有重复颜色的排列问题,ans=num!/(c1!*c2!*c3!*...)

    但是我们不能通过n^2的复杂度来建图

    通过刚才的分析,我们知道,一个连通块里很多边都是多余的,我们只关心连通情况,而不是具体和这个连通块里哪几个点连通(也就是我们尽可能建出一个生成树)

    对于同颜色的球之间的建边,我们去枚举每个球,它只需要判断和权值最小的那个当前颜色球是否能连边

    对于不同颜色球之间的建边,我们去枚举每个球,它只需要与所有颜色与它不同的的球中的最小值(这里需要set来维护,每一次check是logn的)

    那么建图的总的复杂度是O(nlogn)的,总共最多2N条边

    然后对于联通块统计答案即可

  • 相关阅读:
    1029 旧键盘 (20 分)C、Java、python
    1028 人口普查 (20 分)C语言
    1027 打印沙漏 (20 分)C语言
    luoguP2709 小B的询问
    luoguP2709 小B的询问
    bzoj5016 [Snoi2017]一个简单的询问
    bzoj5016 [Snoi2017]一个简单的询问
    luoguP1972 [SDOI2009]HH的项链(莫队)
    luoguP1972 [SDOI2009]HH的项链(莫队)
    Tyvj1091
  • 原文地址:https://www.cnblogs.com/wmrv587/p/6883424.html
Copyright © 2011-2022 走看看