首页 > 其他分享 >Gym-103438C Werewolves

Gym-103438C Werewolves

时间:2023-08-18 10:55:48浏览次数:49  
标签:连通 颜色 103438C sum 子图 节点 Werewolves 联通 Gym

Gym-103438C Werewolves

题面

有 \(n (1 \le n \le 3000)\) 个节点的树,每个节点的颜色为 \(c_i\)。

请计算这个树存在多少不同的连通子图,满足这个连通子图中,存在某种颜色,其出现次数 严格大于 连通子图中节点数量的一半。

简化题意

first

  • 对于任意一个联通子图,如果该联通子图对答案有贡献,则一定只有一种颜色,在其中出现次数严格大于连通子图中节点数量的一半。
  • 所以可以枚举颜色,讲树分为黑白两种颜色

second

  • 对于任意一个联通子图
  • 假设是颜色 \(C\) 的节点在其中出现次数严格大于连通子图中节点数量的一半。
  • 设 \(x\) 为颜色 \(C\) 的节点数量,\(sum\) 为联通子图的节点数量。
  • 该联通子图对答案有贡献,当且仅当(这里的除法都是向下取整):
    • \(x > sum \div 2\)
    • \(x \times 2 > sum\)
    • \(x \times 2 - sum > 0\)
  • 设 \(y = x \times 2 - sum\)。
  • 依据最后推导出的公式,发现颜色 \(C\) 的节点对 \(y\) 的贡献是 \(1\),其余节点对 \(y\) 的贡献是 \(-1\)。

实现 \(O(n^3)\)

  • 化简了题意,接下来就是实现了。
  • 这显然是树上背包,需要注意的是:
    • 注意 \(y\),在背包的途中可能会为负数,所以树上背包不可以在其中实现自我滚动,需要手动进行滚动
    • 在手动滚动的时候,记住树上背包是将一棵树不断转化为二叉树进行合并,所以在更新辅助数组的是在枚举儿子的 for 循环中执行

标签:连通,颜色,103438C,sum,子图,节点,Werewolves,联通,Gym
From: https://www.cnblogs.com/huangqixuan/p/17639821.html

相关文章

  • gym/10446/C. 0689
    C.0689我们考虑i作为左端点的贡献。我们强制翻转之后i这个点与原来不同,因为假如翻转之后i和原来相同,我们显然可以将这个翻转区间的左右端点往中间缩小1,也就是它会在更大的i被计算。另一个问题,对于同一个i,不同的右端点是否会使得翻转之后相同,这也是不会的,abab......
  • 【OpenAI】Python: 基于 Gym-CarRacing 的自动驾驶项目(2)| 车道检测功能的实现 | 边缘
        猛戳,跟哥们一起玩蛇啊! ......
  • Gym104128L Proposition Composition
    很好口胡却不好写。把边分成链边和额外边首先想到分类讨论,显然不能只删额外边,所以有两类情况,删一链边和两链边。如果删一链边,这一链边要么完全没被额外边覆盖,然后其他任选一条;要么被覆盖一次,额外边选覆盖它的边。用线段树简单维护即可。现在难的是删两链边,且这两条链边都至少......
  • Gym103687K Dynamic Reachability
    一个很奇妙的题。回想起之前打的一场模拟赛,有一道题的部分问题是要维护动态图两两联通性的。可能不太一样,但是他有一个离线的思想,将没有修改过的边提前拎出来,把已知的联通性先求了,再用线段树分治一类的可撤销做法维护剩下边的修改。但是这样维护的复杂度跟修改次数相关非常大,如果......
  • 【网络流,dp】Gym102220A Apple Business
    ProblemLink有一棵\(n\)个点的完全二叉树(点\(i\)的父亲是\(\lfloori/2\rfloor\)),第\(i\)个点有\(a_i\)个苹果。现在有\(m\)个订单,每个订单只接受\(u_i\)到\(v_i\)路径上的苹果,保证\(u_i\)是\(v_i\)的父亲,并且最多只接受\(c_i\)个苹果,单价为\(w_i\)。你可......
  • [gym102770L]List of Products
    题意简述我们根据唯一分解定理得到,对于每一个数\(x\)可以表示成\(\sump_i^{e_i}\)的形式,其中\(p_i\)表示第\(i\)大的素数。我们重新定义两个数之间的比较,对于两个数\(x,y\):如果\(x=y\),两个数相等如果\(x,y\)不相等,我们就从小到大枚举素数,知道找到一个下标......
  • 【题解】CF gym 104337 G. Guess the Polynomial
    statement:https://codeforces.com/gym/104337/problem/G。即求\(f(x)=\sum\limits_{i=0}^{p-2}a_ix^i\),其中只有不超过\(n\)个\(a_i\)非\(0\)。记:\[\begin{aligned}A_{n}^{k}&=\sum_{i\equivk\pmod{n}}a_i=\frac{1}{n}\sum_{i=0}^{n-1}f(\omega_{n}^{......
  • CodeForces Gym 102900B Mine Sweeper II
    CF传送门感觉像脑筋急转弯。考虑所有数字之和就是相邻的\((\text{雷},\text{空地})\)对数,因此翻转后这个对数不会改变。然后由于抽屉原理,\(b\toa\)和\(b\to\operatorname{inv}(a)\)中至少有一个操作次数\(\le\left\lfloor\frac{nm}{2}\right\rfloor\),然后就做完了......
  • gym 102994M Travel Dream 题解
    给定带权无向图,求最大\(k\)元环。\(n,m\leq300,3\leqk\leq10\),无重边。把\(k=3\)判掉,可以\(O(m^2)\)轻松解决。把\(k\)元环拆成长度为\(\dfrac{k}{2}-1\)的链\(+\)长度\(k-\dfrac{k}{2}-1\)的链\(+\)连接两条链的两条边。(长度指边的个数)问题:两条链需要无......
  • gym101573I Favorite Points
    gym101573IFavoritePoints纪念一下。#include<bits/stdc++.h>#defineLLlonglong#definePLLpair<LL,LL>#defineMPmake_pair#defineEBemplace_back#defineall(x)x.begin(),x.end()usingnamespacestd;template<typenameT>voidchkmn(T......