题意
有一张 n 个点 m 条边的无重边无自环的有向图
初始时可以选择一个点染黑,其余点均为白点
若某个点所有入边的起点均为黑点,则该点可以被染黑
最大化图中黑点数量

如果一个点x可以将另一个点y染色,那么x的父节点也可以将y节点染色,既然这样,那么我们就可以将x和他的父亲节点进行合并。那么到最后一定会有一些不相交的集合构成一个森林,求森林中最大的那颗树即可。

/**
#include <algorithm>
#include <iostream>
#include <cmath>
#include <vector>
#include <stack>
#include <cstring>
#include <cstdio>
#include <queue>
#include <map>
#include <unordered_map>
#include <iomanip> //保留小数setprecision
#define endl '\n'
#define PI acos(-1.0) // 3.1415
#define Buff std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define mem(a, b) memset(a, b, sizeof(a))
#define lowbit(x) x & -x
#define ll long long
#define ull unsigned long long
#define eps 1e-10
#define int long long
//#pragma GCC optimize(2)
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 2e5 + 7, M = 5e5 + 7;
const int mod = 1e9 + 7;int n, m, Time;
vector<int> q[N];
int fa[N], Size[N];
bool vis[N];int find(int x)
{return fa[x] == x ? x : fa[x] = find(fa[x]);
}void merge(int x, int y)
{Size[y] += Size[x], fa[x] = y, vis[x] = 1;
}bool check(int x)//只有所有父节点都在一起并且不与自己在一起时才能合并。
{if (vis[x] || q[x].empty()) //如果该点遍历过或这个点没有父节点return false;int now = find(q[x][0]), t = q[x].size();for (int i = 1; i < t; i++) //判断是否所有父节点都在一个集合里(是否合并){if (now != find(q[x][i]))return false;}if (now == x)//判断父节点是否与自己在一个集合(是否合并)return false;return true;
}inline void solve()
{Time++;cin >> n;for (int i = 1; i <= n; i++)fa[i] = i, vis[i] = false, Size[i] = 1, q[i].clear();for (int i = 1; i <= n; i++){int x, y;cin >> x;while (x--){cin >> y;q[i].push_back(y);}}while (1){int flag = 1;for (int i = 1; i <= n; i++){if (check(i)) //判断这个点能否进行合并{flag = 0;merge(i, find(q[i][0]));}}if (flag) //如果所有点都不能进行合并,结束break;}int res = 0;for (int i = 1; i <= n; i++)res = max(res, Size[i]);cout << "Case #" << Time << ": " << res << endl;return;
}
signed main()
{int _ = 1;cin >> _;while (_--)solve();return 0;
}
/***  ┏┓   ┏┓+ +* ┏┛┻━━━┛┻┓ + +* ┃       ┃* ┃   ━   ┃ ++ + + +*  ████━████+*  ◥██◤ ◥██◤ +* ┃   ┻   ┃* ┃       ┃ + +* ┗━┓   ┏━┛*   ┃   ┃ + + + +Code is far away from bug with the animal protecting*   ┃   ┃ +                     神兽保佑,代码无bug *   ┃    ┗━━━┓*   ┃        ┣┓*    ┃        ┏┛*     ┗┓┓┏━┳┓┏┛ + + + +*    ┃┫┫ ┃┫┫*    ┗┻┛ ┗┻┛+ + + +*/

2022牛客多校J题 Serval and Essay相关推荐

  1. 2022牛客多校(十)

    2022牛客多校(十) 一.比赛小结 比赛链接:"蔚来杯"2022牛客暑期多校训练营10 二.题目分析及解法(基础题) F.Shannon Switching Game? 题目链接 ...

  2. 2020牛客多校 J Easy Integration 计算过程详解【点火公式(Wallis积分)+组合数学】

    2020牛客暑期多校训练营(第一场) J Easy Integration 题 网上题解大多是 不断分部积分求解,其实有更为简洁的解法. 便是 Wallis积分(点火公式) + 组合数学 求解,本文给 ...

  3. 2022牛客多校十 E-Reviewer Assignment(匈牙利算法)

    题目链接:登录-专业IT笔试面试备考平台_牛客网 题目: 样例输入: 5 3 010 010 101 011 100 样例输出: 2 2 1 3 1 题意:给定n个人和m篇文章,然后给出一个n*m的矩 ...

  4. 2022牛客多校第一场A、C、D、G、I、J

    A- Villages: Landlines 题意: 在一条横轴上给定nnn个点横坐标xsx_sxs​和半径rsr_srs​,可以在横轴上任意两点连线,问连接这nnn个点形成的圆的连线最小长度为多少. ...

  5. 【2022牛客多校第六场 Z题 Game on grid】dp

    题目描述 输入描述 2 3 3 -B -B BB. 1 3 - 输出描述 no no yes no yes no 题意 有一个n*m的棋盘,Alice和Bob轮流进行操作,每操作一步都是从当前点到右边 ...

  6. (2022牛客多校五)H-Cutting Papers(签到)

    样例输入: 2022 样例输出: 3649785.912339927 题意:求|x|+|y|+|x+y|<=n所在的区域和x*x+y*y=(n/2)*(n/2)所在区域的面积并. 这道题就是一个 ...

  7. 2022牛客多校2题解报告(同步自语雀)

    一.赛后总结 总结就是缺乏清晰的大脑,当然一切的一切归因于实力不足. 开局看K,半个小时推出DP式子,交了就WA.差错没查出来,写了暴力对拍,就去看D了.后来拍了3个小时也没出问题...可能是数据生成 ...

  8. 2022牛客多校第二场CDE

    C题 题意:nim游戏,先手赢的话,尽量赢的快,输的话尽量输的慢. 求最多的游戏局数,和先手执行的最优策略数 下面给两个结论: 1,石子数异或和为0的话,先手败,否则胜 2,先手败的话,可以构造出先后 ...

  9. 2022牛客多校联赛第九场 题解

    比赛传送门 作者: fn 目录 签到题 A题 Car Show / 车展 基本题 B题 Two Frogs / 两只青蛙 进阶题 G题 Magic Spells / 魔法咒语 签到题 A题 Car S ...

  10. [构造]Array 2022牛客多校第6场 A

    题目描述 Ranran has a sequence aaa of nnn integers a1,a2,⋯ ,ana_1, a_2, \cdots, a_na1​,a2​,⋯,an​ which s ...

最新文章

  1. docker centos 无法用systemctl 启动服务的问题
  2. unique函数_C++智能指针2:(虚?)析构函数(标准与实现的差异)
  3. 前端性能优化-DNS解析优化
  4. GitPages个人域名博客
  5. HQL中的substring
  6. 将.NET dll注册到GAC(Global Assembly Cache)中
  7. 对象的单数组表示(用单数组实现链表-不一样的链表实现)
  8. 打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...
  9. echo(),print(),print_r(),var_dump()的区别
  10. 《Python Cookbook 3rd》笔记(2.4):字符串匹配和搜索
  11. Linux—编写shell脚本操作数据库执行sql
  12. 更新显示当前歌曲的名称 winform 0130
  13. 手把手带你基于嵌入式Linux移植samba服务
  14. 151. 反转字符串里的单词
  15. SQL SERVER 和EXCEL的数据导入导出
  16. 如何修改maven的默认jdk版本(1.5 改为1.8)
  17. 点滴记录笔记_持续更新
  18. android计算器如何保存记录,计算器历史记录怎么看
  19. Android 各版本gradle下载地址
  20. 微信小程序无法获取头像,昵称的解决办法 (原生)

热门文章

  1. cocos2d_x之AnySDK接入流程
  2. Unable to prase template Class Error message: Index 0 out of bounds for length 0
  3. 【DX12】DirectX Math库 Vector和Matrix类型 XMVECTOR、XMMATRIX
  4. 实现愤怒的小鸟:我们有很多种小鸟(Bird类),每种小鸟都有飞的行为(fly()方法),还有一个弹弓(Slingshot类),弹弓有一个弹射的行为(shot()方法:调用fly()方法)
  5. 云计算领域常见的一些专业术语、专有名词总结(一)
  6. win10修改用户名_win10最详细优化设置|win10专业版笔记本优化教程
  7. node.js(四 --- 全局对象)
  8. python type help copyright_python中help信息
  9. android如何设置自适应大小的背景图片,如何调整背景图片大小以适应Android中的应用程序屏幕大小...
  10. esp32测试wifi速率