牛客小白月赛28 J.树上行走 (并查集,dfs)

题意:有\(n\)个点,\(n-1\)条边,每个点的类型是\(0\)或\(1\),现在让你选一个点,然后所有与该点类型不同的点直接消失,问选哪些点之后,该点所在的联通块最大.
题解:
- 因为选完之后两个类型不同的点之间的边会消失,所以我们可以直接维护一个并查集,每个集合中存的是相同类型的点的连通数量,维护最大值即可.
- 这题也可以用dfs来写,我们可以直接在dfs求连通块的同时用动态数组记录这个连通块中每个点的下标,然后去维护数组长度的最大值,模拟一下,具体细节看代码吧.
代码:
dsu:
int n;
int a[N];
int cnt[N];
int p[N];
vector<int> ans; int find(int x){
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
} int main() {
//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
n=read();
for(int i=1;i<=n;++i){
a[i]=read();
cnt[i]=1;
p[i]=i;
} for(int i=1;i<n;++i){
int u,v;
u=read(),v=read();
if(a[u]==a[v]){
int fu=find(u);
int fv=find(v);
if(fu!=fv){
p[fu]=fv;
cnt[fv]+=cnt[fu];
}
}
} int res=0;
for(int i=1;i<=n;++i){
int fa=find(i);
res=max(res,cnt[fa]);
}
for(int i=1;i<=n;++i){
if(cnt[find(i)]==res) ans.pb(i);
}
printf("%d\n",ans.size());
for(auto w:ans) printf("%d ",w); return 0;
}
dfs:
int n;
int val[N];
vector<int> v[N],s[N];
vector<int> all,res;
int cnt;
bool st[N]; void dfs(int u,int t){
s[t].pb(u);
for(auto w:v[u]){
if(!st[w] && val[w]==val[u]){
st[w]=true;
dfs(w,t);
}
}
} int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;++i){
cin>>val[i];
}
for(int i=1;i<n;++i){
int a,b;
cin>>a>>b;
v[a].pb(b);
v[b].pb(a);
} for(int i=1;i<=n;++i){
if(!st[i]){
st[i]=true;
dfs(i,cnt);
cnt++;
}
}
int mx=0;
int cur=0;
for(int i=0;i<cnt;++i){
if(s[i].size()>mx){
all.clear();
mx=s[i].size();
cur=mx;
all.pb(i);
}
else if(s[i].size()==mx){
all.pb(i);
cur+=mx;
}
}
for(auto w:all){
for(int j=0;j<s[w].size();++j){
res.pb(s[w][j]);
}
}
sort(res.begin(),res.end());
cout<<cur<<endl;
for(auto w:res) cout<<w<<" "; return 0;
}
牛客小白月赛28 J.树上行走 (并查集,dfs)的更多相关文章
- 牛客小白月赛6 J 洋灰三角 数学
链接:https://www.nowcoder.com/acm/contest/136/J来源:牛客网 题目描述 洋灰是一种建筑材料,常用来筑桥搭建高层建筑,又称,水泥.混凝土. WH ...
- 牛客小白月赛2 J 美 【构造】
链接:https://www.nowcoder.com/acm/contest/86/J来源:牛客网 题目描述 最后,Sεlιнα(Selina) 开始了选美大赛. 一如既往地,Sεlιнα 想最大化 ...
- 牛客网 牛客小白月赛1 J.おみやげをまらいました
J.おみやげをまらいました 链接:https://www.nowcoder.com/acm/contest/85/J来源:牛客网 随便写写. 代码: 1 #include<ios ...
- 牛客小白月赛4 J 强迫症 思维
链接:https://www.nowcoder.com/acm/contest/134/J来源:牛客网 题目描述 铁子最近犯上了强迫症,他总是想要把一个序列里的元素变得两两不同,而他每次可以执行一个这 ...
- 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)
链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...
- 牛客练习赛16 C 任意点【并查集/DFS/建图模型】
链接:https://www.nowcoder.com/acm/contest/84/C 来源:牛客网 题目描述 平面上有若干个点,从每个点出发,你可以往东南西北任意方向走,直到碰到另一个点,然后才可 ...
- 牛客小白月赛12 J 月月查华华的手机(序列自动机)
---恢复内容开始--- 题目来源:https://ac.nowcoder.com/acm/contest/392/J 题意: 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机. ...
- 牛客小白月赛1 J おみやげをまらいました 【MAP】
链接:https://www.nowcoder.com/acm/contest/85/J おみやげをまらいました! 蛙蛙还是给你带来了礼物.但它有个小小的要求,那就是你得在石头剪刀布上赢过它才能 ...
- 牛客小白月赛30 J.小游戏 (DP)
题意:给你一组数,每次可以选择拿走第\(i\)个数,得到\(a[i]\)的分数,然后对于分数值为\(a[i]-1\)和\(a[i]+1\)的值就会变得不可取,问能得到的最大分数是多少. 题解:\(a[ ...
随机推荐
- 【Oracle】密码文件相关
Oracle数据库的orapwd命令,主要用来建立密码(口令)文件. 一.查看帮助信息 [oracle@oracle11g dbs]$ orapwd Usage: orapwd file=<fn ...
- Getshell
GetShell 常用免杀大法 一.编码大法 (1).一句话马子本身采用编码 原文:<?php @eval($_GET(a)):?> 转码后:在提交的post的时候可以直接使用\u0026 ...
- (四)React Ant Design Pro + .Net5 WebApi:PostgreSQL数据库环境搭建
一.简介 PostgreSQL,开源数据库(没听过小伙伴自己反思一下自行百度) PgAdmin,官方提供的数据库管理工具. 二.环境 1. 官网下载包,安装数据库 tar xjvf /app/pack ...
- ADB 基本命令
ADB很强大,记住一些ADB命令有助于提高工作效率. 获取序列号: adb get-serialno 查看连接计算机的设备: adb devices 重启机器: adb reboot 重启到bootl ...
- 超详细oracle 11g安装步骤 win版本
1. 打开网址: https://edelivery.oracle.com 使用oracle 任意账号登录 账号:2696671285@qq.com 密码:Oracle123 感谢来自某位好心大佬的共 ...
- js input相关事件(转载)
1.onfocus 当input 获取到焦点时触发. 2.onblur 当input失去焦点时触发,注意:这个事件触发的前提是已经获取了焦点再失去焦点的时候才会触发该事件,用于判断标签为空.3.o ...
- FastAPI实践项目:SayHello(FastAPI + vue.js + axios + element ui)
目录 简介 翻版 VS 本尊 后端服务 源码 接下来 简介 这次带来的是FastAPI + vue.js + axios + element ui (一个html文件里使用的) 实现的<Flas ...
- 键相同,比较两个map中的值是否相同
获取.排序.比较两个Map中相同key对应value值 /** * * @param hashMap 原数据 * @param hashMap2 需要比较的数据 * @return */ privat ...
- gitignore 不起作用的解决办法 不再跟踪 让.gitignore生效,跟踪希望被跟踪的文件
实践 # https://git-scm.com/docs/gitignore https://git-scm.com/docs/gitignore 不跟踪log目录下的所有文件,但需要保留这个文件夹 ...
- C++学习之STL(二)String
1.assign assign方法可以理解为先将原字符串清空,然后赋予新的值作替换. 返回类型为 string类型的引用.其常用的重载也有下列几种: a. string& assign ( c ...