题意为给定一张无向图,对于每一个点,只有当他的所有入边的点都被激活时,他才被激活,并且可以被用于激活出边的点,在最开始,可以无条件指定一个点为激活状态,问最大的可激活点为多少

(当一个点的入边为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(图的启发式合并)相关推荐

  1. “蔚来杯“2022牛客暑期多校训练营7 L Maximum Range(强连通缩点+网络流输出方案)

    "蔚来杯"2022牛客暑期多校训练营7 L Maximum Range(强连通缩点+网络流输出方案) 题意 找一个环 上面的边权 极差最大 并输出 点 思路 我们先强联通缩点 统计 ...

  2. “蔚来杯“2022牛客暑期多校训练营1

    "蔚来杯"2022牛客暑期多校训练营1 C Grab the Seat! D Mocha and Railgun 题意: 给定一个圆环,中心为(0, 0).给定T个查询,每次给定环 ...

  3. “蔚来杯“2022牛客暑期多校训练营9 补题题解(A、B、G、E)

    "蔚来杯"2022牛客暑期多校训练营9 A Car Show B Two Frogs G Magic Spells E Longest Increasing Subsequence ...

  4. “蔚来杯“2022牛客暑期多校训练营6

    "蔚来杯"2022牛客暑期多校训练营6 [题目链接]("蔚来杯"2022牛客暑期多校训练营6_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛 ...

  5. “蔚来杯“2022牛客暑期多校训练营10,签到题HFIE

    题号 标题 已通过代码 通过率 团队的状态 A Everlasting Transeunt 点击查看 6/42 B Fall Guys-Perfect Match 点击查看 6/115 C Magic ...

  6. “蔚来杯“2022牛客暑期多校训练营8

    Equivalence in Connectivity 前置知识点如下: 1. 并查集哈希 2. 可撤销并查集 3. 线段树分治 #include<bits/stdc++.h> using ...

  7. “蔚来杯“2022牛客暑期多校训练营10补题

    H  Wheel of Fortune 题意 有两个人在打炉石,一方转动了尤格萨隆的命运之轮触发了炎爆选项.双方英雄的血量分别为A和B,双方场面的血量分别为ai和bi,问A获胜的概率. 思路 将代码分 ...

  8. “蔚来杯“2022牛客暑期多校训练营8 D题: Poker Game: Decision

    D题: Poker Game: Decision 原题链接:https://ac.nowcoder.com/acm/contest/33193/D 题目大意 在德州扑克的大小比较规则情况下,发牌顺序与 ...

  9. “蔚来杯“2022牛客暑期多校训练营2 G.[Link with Monotonic Subsequence] 分块构造

    G. Link with Monotonic Subsequence 构造 题目分析 要求构造一个长度为 n n n的序列,使得序列的 max ⁡ ( lis ( p ) , lds ( p ) ) ...

  10. “蔚来杯“2022牛客暑期多校训练营2 个人题解集合

    文章目录 D.[Link with Game Glitch](https://ac.nowcoder.com/acm/contest/33187/D) 题目分析 Code G.[ Link with ...

最新文章

  1. 数据库事务系列-事务模型基础
  2. 创建azure服务器
  3. 寻找数组变化:树形结构,分治模型
  4. Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
  5. 75的写的自己情感经历(转贴自天涯社区)
  6. Webrtc入门——基于阿里云ubuntu 最新webrtc Android平台编译详细说明
  7. php表单写入数据库,php表单写入数据库
  8. ie9 css过大,CSS 3后台大小不适用于IE9(CSS 3 background-size not working on IE9)
  9. 《剑指offer》第二十三题(链表中环的入口结点)
  10. 错误empty character constant的解决办法
  11. 傅里叶变换和拉普拉斯变换
  12. JSON cannot be resolved 解决方法
  13. 数据库——概念模型(CDM)、逻辑模型(LDM)、物理模型(PDM)
  14. 【Python】新华字典(bushi
  15. word在英文输入法的状态下,打出来的引号还是中文字符
  16. 信息安全——安全威胁
  17. mininet *** Error: RTNETLINK answers: No such file or directory 问题及解决方法
  18. Android开发之监听手机来电
  19. 苹果安全赏金计划玩不起?研究人员怒发其未修复漏洞的源代码
  20. 随性随笔_201606

热门文章

  1. 39岁了,我依然要谈梦想
  2. 百度地图API V2.0 离线版本
  3. iOS16新特性及开发适配
  4. JDK1.8u162以及JDK1.8所有历史版本官网下载地址
  5. html touch时没有阴影,4399touch怎么玩 Touch游戏常见问题汇总
  6. 【编程不良人】SpringSecurity实战学习笔记04---RememberMe
  7. 【PMBOK重点知识】工作绩效数据、工作绩效信息、工作绩效报告之间的区别和关系
  8. python炒股难度_诺贝尔奖得主教你如何分配炒股仓位 | python量化系列
  9. 计算图片的相似度(深度学习)
  10. 使用IMU与轮速计进行单线激光雷达的运动畸变校正