“蔚来杯“2022牛客暑期多校训练营1 J Serval and Essay(图的启发式合并)
题意为给定一张无向图,对于每一个点,只有当他的所有入边的点都被激活时,他才被激活,并且可以被用于激活出边的点,在最开始,可以无条件指定一个点为激活状态,问最大的可激活点为多少
(当一个点的入边为0个时,他只有最开始被你激活才可以激活,否则都是未激活)
首先我们可以想到,如果这个点只有一个父节点,当且仅当他的父节点被激活时,他才被激活,所以可以将他和他的父节点合并,把size小的集合合并到size大的集合里,同时把入边和出边合并到大集合中,如过他的出边连接的点的入边减少成了1(也就是合并之后下一个节点的入边变成1了),我们就继续合并,这样合并后的图就不存在桥
只需要维护每个连通块size的大小,最后答案取一个最大值即可
比如第二个样例吧
我们可以给他合并成
答案为3
再比如第三个样例
我们可以给他合并成
答案为4
代码如下
#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define fer(i,a,b) for(int i=a;i<=b;++i)
#define der(i,a,b) for(int i=a;i>=b;--i)
#define all(x) (x).begin(),(x).end()
#define pll pair<int,int>
#define et cout<<'\n'
#define xx first
#define yy second
#define ld long double
using namespace std;
const int N = 2e5+10;
set<int> from[N],to[N];
int siz[N];
int p[N];
int find(int x){if(p[x]!=x) p[x]=find(p[x]);return p[x];
}
void merge(int x, int y)
{int a = find(x), b = find(y);if(a == b) return ;if(to[a].size() < to[b].size()) swap(a, b);p[b] = a, siz[a] += siz[b];vector<pll> alls;for(auto t:to[b]){to[a].insert(t);from[t].erase(b);from[t].insert(a);if(from[t].size()==1){alls.push_back({t,a});} } for(auto t:alls)merge(t.first, t.second);
}
signed main()
{int T;cin>>T;int cnt = 0;while(T --){int n;cin>>n;fer(i,1,n){p[i] = i;from[i].clear();to[i].clear();siz[i]=1;}fer(i,1,n){int k;cin>>k;while(k --){int v;cin>>v;from[i].insert(v);to[v].insert(i);} } fer(i,1,n){if(from[i].size() == 1){merge(*from[i].begin(), i);}}int res = 0;fer(i,1,n){res = max(res, siz[find(i)]);}printf("Case #%d: %d\n", ++cnt,res);}return 0;
}
“蔚来杯“2022牛客暑期多校训练营1 J Serval and Essay(图的启发式合并)相关推荐
- “蔚来杯“2022牛客暑期多校训练营7 L Maximum Range(强连通缩点+网络流输出方案)
"蔚来杯"2022牛客暑期多校训练营7 L Maximum Range(强连通缩点+网络流输出方案) 题意 找一个环 上面的边权 极差最大 并输出 点 思路 我们先强联通缩点 统计 ...
- “蔚来杯“2022牛客暑期多校训练营1
"蔚来杯"2022牛客暑期多校训练营1 C Grab the Seat! D Mocha and Railgun 题意: 给定一个圆环,中心为(0, 0).给定T个查询,每次给定环 ...
- “蔚来杯“2022牛客暑期多校训练营9 补题题解(A、B、G、E)
"蔚来杯"2022牛客暑期多校训练营9 A Car Show B Two Frogs G Magic Spells E Longest Increasing Subsequence ...
- “蔚来杯“2022牛客暑期多校训练营6
"蔚来杯"2022牛客暑期多校训练营6 [题目链接]("蔚来杯"2022牛客暑期多校训练营6_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛 ...
- “蔚来杯“2022牛客暑期多校训练营10,签到题HFIE
题号 标题 已通过代码 通过率 团队的状态 A Everlasting Transeunt 点击查看 6/42 B Fall Guys-Perfect Match 点击查看 6/115 C Magic ...
- “蔚来杯“2022牛客暑期多校训练营8
Equivalence in Connectivity 前置知识点如下: 1. 并查集哈希 2. 可撤销并查集 3. 线段树分治 #include<bits/stdc++.h> using ...
- “蔚来杯“2022牛客暑期多校训练营10补题
H Wheel of Fortune 题意 有两个人在打炉石,一方转动了尤格萨隆的命运之轮触发了炎爆选项.双方英雄的血量分别为A和B,双方场面的血量分别为ai和bi,问A获胜的概率. 思路 将代码分 ...
- “蔚来杯“2022牛客暑期多校训练营8 D题: Poker Game: Decision
D题: Poker Game: Decision 原题链接:https://ac.nowcoder.com/acm/contest/33193/D 题目大意 在德州扑克的大小比较规则情况下,发牌顺序与 ...
- “蔚来杯“2022牛客暑期多校训练营2 G.[Link with Monotonic Subsequence] 分块构造
G. Link with Monotonic Subsequence 构造 题目分析 要求构造一个长度为 n n n的序列,使得序列的 max ( lis ( p ) , lds ( p ) ) ...
- “蔚来杯“2022牛客暑期多校训练营2 个人题解集合
文章目录 D.[Link with Game Glitch](https://ac.nowcoder.com/acm/contest/33187/D) 题目分析 Code G.[ Link with ...
最新文章
- 数据库事务系列-事务模型基础
- 创建azure服务器
- 寻找数组变化:树形结构,分治模型
- Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
- 75的写的自己情感经历(转贴自天涯社区)
- Webrtc入门——基于阿里云ubuntu 最新webrtc Android平台编译详细说明
- php表单写入数据库,php表单写入数据库
- ie9 css过大,CSS 3后台大小不适用于IE9(CSS 3 background-size not working on IE9)
- 《剑指offer》第二十三题(链表中环的入口结点)
- 错误empty character constant的解决办法
- 傅里叶变换和拉普拉斯变换
- JSON cannot be resolved 解决方法
- 数据库——概念模型(CDM)、逻辑模型(LDM)、物理模型(PDM)
- 【Python】新华字典(bushi
- word在英文输入法的状态下,打出来的引号还是中文字符
- 信息安全——安全威胁
- mininet *** Error: RTNETLINK answers: No such file or directory 问题及解决方法
- Android开发之监听手机来电
- 苹果安全赏金计划玩不起?研究人员怒发其未修复漏洞的源代码
- 随性随笔_201606
热门文章
- 39岁了,我依然要谈梦想
- 百度地图API V2.0 离线版本
- iOS16新特性及开发适配
- JDK1.8u162以及JDK1.8所有历史版本官网下载地址
- html touch时没有阴影,4399touch怎么玩 Touch游戏常见问题汇总
- 【编程不良人】SpringSecurity实战学习笔记04---RememberMe
- 【PMBOK重点知识】工作绩效数据、工作绩效信息、工作绩效报告之间的区别和关系
- python炒股难度_诺贝尔奖得主教你如何分配炒股仓位 | python量化系列
- 计算图片的相似度(深度学习)
- 使用IMU与轮速计进行单线激光雷达的运动畸变校正