牛客小白月赛25 C.白魔法师

题目链接

题目描述

你是一个白魔法师。
现在你拿到了一棵树,树上有 个点,每个点被染成了黑色或白色。
你可以释放一次魔法,将某个点染成白色。(该点不一定是黑色点,也可以是白色点)
现在释放魔法后要保证最大的白色点连通块尽可能大。请求出最大白色连通块的大小。
注:所谓白色连通块,指这颗树的某个连通子图,上面的点全部是白色。
输入描述:
第一行输入一个正整数 n ,代表树的顶点数量。
第二行输入一个长度为 n 的、仅由’W’和’B’组成的字符串,第 i 个点为’W’代表该点为白色,'B’代表该点为黑色。
接下来的 n-1 行,每行输入两个正整数 x 和 y ,代表 x 点和 y 点有一条边连接。

输出描述:

一个正整数,代表施放魔法后,最大的白色连通块的大小。

示例1

输入

4
WBBW
1 2
2 3
3 4

输出

2

这题可以巧妙地用并查集求解~
首先,可以通过并查集的合并求出每个白色点 iii 的孩子个数 son[i]son[i]son[i]
然后可以计算出每个白色的点 iii 所处连通块的大小 num[i]=son[Findfather(i)]+1num[i]=son[Findfather(i)]+1num[i]=son[Findfather(i)]+1,然后可以对每个黑色点进行遍历更新答案即可,AC代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
vector<ll>g[N];
ll n,x,y,father[N],son[N],num[N];
string s;
ll Find(ll x){return father[x]==x?x:Find(father[x]);
}void Union(ll x,ll y){ll m=Find(x),n=Find(y);if(m!=n){if(son[m]<son[n]){father[m]=n;son[n]+=son[m]+1;}else{father[n]=m;son[m]+=son[n]+1;}}
}main(){cin>>n>>s;for(int i=1;i<=n;i++) father[i]=i;for(int i=1;i<n;i++){cin>>x>>y;g[x].push_back(y);g[y].push_back(x);if(s[x-1]==s[y-1] && s[y-1]=='W') Union(x,y);}for(int i=1;i<=n;i++){if(s[i-1]=='W') num[i]=son[Find(i)]+1;}ll ans=0;for(int i=1;i<=n;i++){if(s[i-1]=='B'){ll sum=1;for(int j:g[i]) if(s[j-1]=='W') sum+=num[j];ans=max(ans,sum);}}if(ans==0) cout<<n;else cout<<ans;
}

牛客小白月赛25 C.白魔法师相关推荐

  1. 牛客小白月赛25 C 白魔法师 并查集

    链接:https://ac.nowcoder.com/acm/contest/5600/C 来源:牛客网 题目描述 你是一个白魔法师. 现在你拿到了一棵树,树上有 个点,每个点被染成了黑色或白色. 你 ...

  2. 牛客小白月赛25 C白魔法师 (bfs | 并查集)

    题目描述:题目链接 题意分析: n个节点 n-1条边,非常明显的树形结构(题目中就有说 ),因此不需要考虑环的情况. 树上有两种颜色,一种是白色一种是黑色,我们可以推断出这题应该是考虑连通块的大小,那 ...

  3. 牛客小白月赛25 D.抽卡

    牛客小白月赛25 D.抽卡 题目链接 题目描述 王子连接的国服终于上线啦~ 已知王子连接的抽卡系统如下: 共有 n 个卡池,第 个卡池共有 aia_iai​ 种卡,每张卡的出货率都是相等的(也就是说该 ...

  4. 白魔法师--图的连通块问题(牛客小白月赛25)

    链接:题目链接 来源:牛客网 白魔法师 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 你 ...

  5. 白魔法师(牛客小白月赛25 图、并查集)

    白魔法师 链接:https://ac.nowcoder.com/acm/contest/5600/C 题目描述 你是一个白魔法师. 现在你拿到了一棵树,树上有 nnn 个点,每个点被染成了黑色或白色. ...

  6. 牛客小白月赛25 补题+题解[A-J]

    加油加油加油! 文章目录 A.AOE还是单体? B.k-size字符串 C.白魔法师 D.抽卡 E.点击消除 F.疯狂的自我检索者 G.解方程 H.神奇的字母(二) I.十字爆破 J.异或和之和 A. ...

  7. 白魔法师-牛客小白月赛25

    对于这个题目,我的做法是换根dp, 因为可以选择将某一个点染成白色(不论之前的点是黑是白) , 做法如下: 将每个点当成根节点, 然后将根节点染成白色, 完全符合题意:: 首先dfs一下, 自底向上, ...

  8. 牛客小白月赛25 C-白魔法师 ( 图论 + 并查集 )

    题目链接 解题报告: 思路:如果将一个黑色点染成白色,那么将得到一个白色连通块,这个连通块由和这个黑色点连结的所有白色连通块组成. 如果将一个白色点染成白色,那么不会有任何变化. 所以我们可以先并查集 ...

  9. 牛客小白月赛23(A、B

    牛客小白月赛 A.膜法记录 题意: 给n行m列的矩阵,矩阵中的每个位置都可能有敌人 现在你能消灭a行和b列的敌人,问是否有可能将所有敌人都消灭. 数据范围:n<=20,m<=1e5 思路: ...

最新文章

  1. 2016-2022年AutoCAD起重机吊装计划和索具图纸
  2. matlab怎么根据波宽度去波,使用Matlab图像处理(三)——图像滤波原理
  3. 华为云大数据存储的冗余方式是三副本_大数据入门:HDFS数据副本存放策略
  4. SpringBoot+Vue实现请求后台获取Base64编码的图片验证码并使用Redis缓存实现2分钟内有效
  5. Android_Fragment_Fragment详解
  6. Linux : find big file in the all directories
  7. MAC OS X Yosemite安装与试用
  8. linux 网卡无效 设置_Linux系统的双网卡设置
  9. uni-app 中通过 async + await + Promise 实现 request 请求同步化
  10. 如何看oracle 删除完全,怎么查看以前Oracle卸载干净没?
  11. 制作maven模板框架
  12. 很好用的搜网盘资源工具。很多都能找到
  13. 怎样抠图怎么把背景换成白色?几个步骤教你轻松掌握
  14. dblink导致存储过程报异常ORA-03113:通信通道文件尾 ORA-02063紧接着line(xxxdblink名称) ORA-06512在(xxxx)line 24
  15. Java分页处理的三种方式
  16. 远程无线视频监控知识
  17. nginx一会儿正常,一会儿404,nginx一会儿访问网页1,一会儿访问网页2
  18. vue项目有几个接口content Download时间特别长的解决办法
  19. 易飞ERP软件用户组及权限设定-易飞ERP免费教程 转载
  20. 博图V15仿真时出现“实际在线CPU当前连有一些应用程序。只有关闭它们后才可启动仿真器”的问题,不弹出仿真窗口

热门文章

  1. 不会PS图片怎么批量调色
  2. LeetCode135. 分发糖果(贪心算法)
  3. Word2016如何去掉首页页码并从任意也开始页码
  4. spring框架三种类型项目实现--基础maven类型、纯注解开发型、aop结合注解开发型
  5. uip协议,主动发送功能
  6. 一种射频卡读写原理及实现
  7. 常见硬件术语手册!绝对权威!(转!)六、声卡术语解释
  8. linux telnet qq邮箱,用telnet测试给qq邮箱发邮件,中途可能腾讯要你开启smtp服务器...
  9. 计算机网口百兆改千兆,家里是千兆网,但是网口是百兆怎么办?
  10. 176310 Can’t place multiple pins assigned to pin location Pin_K22(IOPAD_X77_Y33_N14)(FPGA编译出现复用引脚)