AcWing 第 92 场周赛 C题 4866. 最大数量 题解
链表 + 并查集乱搞做法:
思路
首先可以发现,想要让度数尽量大,那我们应该构造成菊花图,即下图所示:

对于每个需求,我们可以知道,如果之前他们没有连在一起,那我们一定得把他们连在一起,该过程使用并查集维护。
如果他们已经连接了,实际上我们就多出来一条“自由边”。
对于自由边,如何进行利用呢,肯定是将包含点数最多的几个菊花团连在一起,重新组合形成一个大的菊花最好。
于是有了以下做法:
对于每个询问,如果两点之间不在同一菊花内,直接进行连接,同时把其中一点从链表中删去,这表示该点不为菊花的中心。
如果两点已经在同一菊花内了,将自由边数\(num\)加一,同时将链表内节点以儿子数进行排序,并将前\(num + 1\)个累加作为答案输出(加一是因为 num 是合并的次数,合并 num 次实际上应该有 num + 1团菊花)
代码
#include <bits/stdc++.h>
#define MAXn 1010
using namespace std;
int n, d;
int fa[MAXn], deep[MAXn], num;
int paixu[MAXn], cnt;//重排序数组
struct point
{
int front, behind;
}p[MAXn];//链表节点
inline int getfa(int x)//并查集
{
if(x == fa[x])
return fa[x];
return fa[x] = getfa(fa[x]);
}
bool com(int a, int b){ return a > b;}//从大到小排序
int main()
{
cin >> n >> d;
for(int i = 1; i <= n; i++)
{
p[i].front = i - 1;
p[i].behind = i + 1;
fa[i] = i;
deep[i] = 1;
}
p[0].behind = 1;
p[n + 1].front = n;//初始化
while(d--)
{
int x, y;
cin >> x >> y;
int fa_x = getfa(x), fa_y = getfa(y);
if(fa_x != fa_y)//不在联通块内
{
fa[fa_y] = fa_x;
deep[fa_x] += deep[fa_y];//合并,注意看清不用上面并给x,下面加给y了
p[p[fa_y].front].behind = p[fa_y].behind;
p[p[fa_y].behind].front = p[fa_y].front;//从链表中删除
}
else num++;//在,自由边加1
int i = p[0].behind;//开始遍历链表
cnt = 0;
while(i <= n)
{
paixu[++cnt] = deep[i];
i = p[i].behind;
}
sort(paixu + 1, paixu + cnt + 1, com);//排序
int ans = paixu[1];
for(int i = 2; i <= num + 1; i++)
{
ans += paixu[i];
}//利用自由边
cout << ans - 1 << "\n";//减一是因为,我们统计时是用的连通块大小,但是题目问的是度的大小
}
return 0;
}
AcWing 第 92 场周赛 C题 4866. 最大数量 题解的更多相关文章
- AcWing第85场周赛
这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...
- leetcode 第184场周赛第一题(数组中的字符串匹配)
一.函数的运用 1,strstr(a,b); 判断b是否为a的子串,如果是,返回从b的开头开始到a的结尾 如“abcdefgh” “de” 返回“defgh”: 如果不是子串,返回NULL: 2,me ...
- AcWing第78场周赛
今天想起来了,就补一下吧~ 第一题 商品分类 货架中摆放着 n 件商品,每件商品都有两个属性:名称和产地. 当且仅当两件商品的名称和产地都相同时,两件商品才视为同一种商品. 请你统计,货架中一共有多少 ...
- AcWing 第11场周赛题解
计算abc 首先 \(0<=a<=b<=c\) 会随机给出 \(a+b,a+c,b+c,a+b+c\)的值 因为\(a,b,c\)都为正整数,所以\(a+b+c\)一定为最大值 然后 ...
- Leetcode第 217 场周赛(思维量比较大)
Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...
- 2019牛客暑期多校训练营(第四场)k题、j题
传送门 k题: 题意: 给你一串由数字构成的字符串,你从这个字符串中找子字符串使这个字符串是300的倍数 题解: 这道题和第三场的B题极其相似 首先可以把是三百的倍数分开,必须要是100和3的倍数 是 ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- CSDN 轻松周赛赛题:能否被8整除
轻松周赛赛题:能否被8整除 题目详情 给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除. 输入格式: 多组数据,每组数据是一个非负整数.非负整数的位数不超过10000位. 输出格式 ...
- LeetCode-第 166 场周赛
LeetCode-第 166 场周赛 1281.subtract-the-product-and-sum-of-digits-of-an-integer 1282.group-the-people-g ...
随机推荐
- Mac M系列芯片 vue前端node-sass兼容问题解决
0.由于M系列芯片是arm架构,在使用brew安装node时都是arm的node,但是node-sass@4.14.1版本中不支持arm架构的出现如下报错: Error: Node Sass does ...
- 2023-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver
2023-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并且 average(A) == aver ...
- 2021-06-20:已知一个消息流会不断地吐出整数 1~N,但不一定按照顺序依次吐出。如果上次打印的序号为i, 那么当i+1出现时,请打印 i+1 及其之后接收过的并且连续的所有数,直到1~N全部接
2021-06-20:已知一个消息流会不断地吐出整数 1~N,但不一定按照顺序依次吐出.如果上次打印的序号为i, 那么当i+1出现时,请打印 i+1 及其之后接收过的并且连续的所有数,直到1~N全部接 ...
- docker安装es,单机集群模式.失败。
操作系统:mac系统. docker run -d --name es1 -p 9201:9200 -p 9301:9300 elasticsearch:7.14.0 docker run -d -- ...
- ET框架6.0分析二、异步编程
概述 ET框架很多地方都用到了异步,例如资源加载.AI.Actor模型等等.ET框架对C#的异步操作进行了一定程度的封装和改造,有一些特点: 显式的或者说强调了使用C#异步实现协程机制(其实C#的异步 ...
- SpringMVC 后台从前端获取单个参数
1.编写web.xml(模板) 2.springmvc配置文件 3.编写对应数据库字段的pojo实体类 @Data @AllArgsConstructor @NoArgsConstructor pub ...
- 深入解析React DnD拖拽原理,轻松掌握拖放技巧!
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值.. 本文作者:霁明 一.背景 1.业务背景 业务中会有一些需要实现拖拽 ...
- 区块链的Token机制如何理解?
区块链的Token机制如何理解? 为了更好的理解区块链和Token的关系,今天专门基于互联网中的内容,做了下筛选过滤,从而可以让大家更好的理解,对于Token,如果是从事过开发的同学来说,比如容易理解 ...
- Helm实战案例一:在Kubernetes上使用Helm搭建Prometheus Operator监控
目录 一.系统环境 二.前言 三.Prometheus Operator简介 四.helm安装prometheus-operator 五.配置prometheus-operator 5.1 修改gra ...
- ChatGPT:在线免费智能聊天网页版
在当今网络时代,聊天实现了从文字.语音到视频的全面发展.然而,在众多聊天方式中,许多人更喜欢使用人工智能技术来帮助进行自然的对话交流.那么,是否有一个在线免费ChatGPT网页版,可以提供更好的交互体 ...