原题链接

链表 + 并查集乱搞做法:

思路

首先可以发现,想要让度数尽量大,那我们应该构造成菊花图,即下图所示:

对于每个需求,我们可以知道,如果之前他们没有连在一起,那我们一定得把他们连在一起,该过程使用并查集维护。

如果他们已经连接了,实际上我们就多出来一条“自由边”。

对于自由边,如何进行利用呢,肯定是将包含点数最多的几个菊花团连在一起,重新组合形成一个大的菊花最好。

于是有了以下做法:

对于每个询问,如果两点之间不在同一菊花内,直接进行连接,同时把其中一点从链表中删去,这表示该点不为菊花的中心。

如果两点已经在同一菊花内了,将自由边数\(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. 最大数量 题解的更多相关文章

  1. AcWing第85场周赛

    这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...

  2. leetcode 第184场周赛第一题(数组中的字符串匹配)

    一.函数的运用 1,strstr(a,b); 判断b是否为a的子串,如果是,返回从b的开头开始到a的结尾 如“abcdefgh” “de” 返回“defgh”: 如果不是子串,返回NULL: 2,me ...

  3. AcWing第78场周赛

    今天想起来了,就补一下吧~ 第一题 商品分类 货架中摆放着 n 件商品,每件商品都有两个属性:名称和产地. 当且仅当两件商品的名称和产地都相同时,两件商品才视为同一种商品. 请你统计,货架中一共有多少 ...

  4. AcWing 第11场周赛题解

    计算abc 首先 \(0<=a<=b<=c\) 会随机给出 \(a+b,a+c,b+c,a+b+c\)的值 因为\(a,b,c\)都为正整数,所以\(a+b+c\)一定为最大值 然后 ...

  5. Leetcode第 217 场周赛(思维量比较大)

    Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...

  6. 2019牛客暑期多校训练营(第四场)k题、j题

    传送门 k题: 题意: 给你一串由数字构成的字符串,你从这个字符串中找子字符串使这个字符串是300的倍数 题解: 这道题和第三场的B题极其相似 首先可以把是三百的倍数分开,必须要是100和3的倍数 是 ...

  7. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  8. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  9. CSDN 轻松周赛赛题:能否被8整除

    轻松周赛赛题:能否被8整除 题目详情 给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除. 输入格式: 多组数据,每组数据是一个非负整数.非负整数的位数不超过10000位. 输出格式 ...

  10. LeetCode-第 166 场周赛

    LeetCode-第 166 场周赛 1281.subtract-the-product-and-sum-of-digits-of-an-integer 1282.group-the-people-g ...

随机推荐

  1. KaiOS 2.5.X 使用 WebIDE 安装以及调试第三方应用程序

    本教程将展示使用 Waterfox Classic 安装为 KaiOS 2.5.x 设计的应用,同时我们也非常推荐使用它来进行安装和调试应用. 本教程本身不会对手机产生任何损害,但请注意,你必须信任你 ...

  2. Requested setting INSTALLED_APPS, but settings are not configured. You must either define the env...

    解决办法 在test.py文件的最头部加上以下代码,配置环境 import os,django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djb ...

  3. 用BP软件 批量注册用户

    第五步:查看管理员后台----用户界面, 有没有批量添加进用户

  4. C# EFCore 根据Oracle/SqlServer数据库表生成实体类和DbContext

    官方文档: https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/scaffolding?tabs=dotnet-core-cli 本文以 ...

  5. 代码随想录算法训练营Day38 动态规划

    代码随想录算法训练营 代码随想录算法训练营Day38 动态规划|理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 理论基础 动态规划,英文:Dynamic Programm ...

  6. Jackson前后端开发模式必备json利器

    前言 json是我们现代互联网程序最常用的交互格式,是否你在工作中会遇到前端说字段不一致需要改的需求,是否遇到过数据库字段名与javaBean的规范不同,是否遇到过json与javaBean相互转换时 ...

  7. KL变换

    covariance 指两个变量的相关性:cov(x, y) =E(x y) - E(x) E(y) cov(x, y) < 0 负相关 cov(x, y) = 0 无关 cov(x, y) & ...

  8. 【pandas基础】--目录(完结)

    pandas 基础内容的目录: 概述 pandas 主要功能和应用场景的介绍. 数据读取 数据读取是第一步,只有成功加载数据之后,后续的操作才有可能. pandas 可以读取和导入各种数据格式的数据, ...

  9. JUC同步锁原理源码解析五----Phaser

    JUC同步锁原理源码解析五----Phaser Phaser Phaser的来源 A reusable synchronization barrier, similar in functionalit ...

  10. SLF4J门面日志框架源码探索

    1 SLF4J介绍 SLF4J即Simple Logging Facade for Java,它提供了Java中所有日志框架的简单外观或抽象.因此,它使用户能够使用单个依赖项处理任何日志框架,例如:L ...