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 ...
随机推荐
- Mysql列转行, group_concat的使用
开始业务的查询的时候碰到一个sql的查询语句问题,主要是 group_concat 之前没用过,现在记录一下怎么用 group_concat 用法, 可以将相同的行组合起来 group_concat( ...
- 爬虫之浏览器指纹ja3_hash的更改
浏览器指纹 反爬中会遇到浏览器指纹,它是不会随着你更换 IP 或者 User-Agent 而改变的.并且他们的指纹每次请求也是固定的.只要网站发现某个拥有特定指纹的客户端持续高频率请求网站,它就可以把 ...
- Golang常用语法糖
1.名字由来 语法糖(Syntactic sugar)的概念是由英国计算机科学家彼得·兰丁提出的,用于表示编程语言中的某种类型的语法,这些语法不会影响功能,但使用起来却很方便.语法糖,也称糖语法,这些 ...
- 微信小程序客服、支付、定位、下拉加载功能
一.客服功能 1.只要你微信小程序,后台添加了客服,引用以下button,就可以进入聊天(在小程序官网如何添加客服用户,请自行百度,谢谢) 2.通过按钮方式 <button open-type= ...
- 2020-09-14:KVM和XEN虚拟化的区别?
福哥答案2020-09-14:#福大大架构师每日一题#[答案来自此链接](https://bbs.csdn.net/topics/397671000)KVM:1.虚拟化支持:全虚拟化.2.支持架构:虚 ...
- 2021-03-12:go中,如何确定有没有内存泄露,系统里怎么去监控整体的运行情况,日志是怎么处理的?
2021-03-12:go中,如何确定有没有内存泄露,系统里怎么去监控整体的运行情况,日志是怎么处理的? 福哥答案2021-03-12: runtime/pprof:采集程序(非 Server)的运行 ...
- Django笔记四十之运行Django环境的python脚本
本文首发于公众号:Hunter后端 原文链接:Django笔记四十之运行Django环境的python脚本 这一篇笔记介绍如何在 Django 中运行脚本. 假设说我们要实现一个功能,需要获取 blo ...
- django安装依赖包报错No such file or directory: 'requirement.txt'和警告You are using pip version 22.0.4; however, version 23.0.1 is available.
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirement.txt'WARNI ...
- 记录-开发WPF项目中的一个疑惑
背景 项目技术栈:C#,WPF当前我想要实现点击某个按钮就可以跳转到某个界面,翻阅了项目中的代码,看到了 // 按钮事件 private void Btn_Click(object sender, R ...
- 2021年蓝桥杯C/C++大学B组省赛真题(货物摆放 )
题目描述: 小蓝有一个超大的仓库,可以摆放很多货物. 现在,小蓝有n 箱货物要摆放在仓库,每箱货物都是规则的正方体. 小蓝规定了长.宽.高三个互相垂直的方向,每箱货物的边都必须严格平行于长.宽.高. ...