题目描述

给定长度为 \(n\) 的整数序列 \(a_1, a_2, \cdots, a_n\),我们将从该序列中构造出一张无向图 \(G\)。具体来说,对于所有 \(1 \le i < j \le n\),若 \(i - j = a_i - a_j\),则 \(G\) 中将存在一条连接节点 \(i\) 与 \(j\) 的无向边,其边权为 \((a_i + a_j)\)。

求 \(G\) 的一个匹配,使得该匹配中所有边的边权之和最大,并输出最大边权之和。

请回忆:无向图的匹配,指的是从该无向图中选出一些边,使得任意两条边都没有公共的节点。特别地,不选任何边也是一个匹配。

思路

首先我们看到题目中的一句话:

若 \(i - j = a_i - a_j\),则 \(G\) 中将存在一条连接节点 \(i\) 与 \(j\) 的无向边

我们把这个式子两边同时加上 \(j\),减去 \(a_i\),可以得到如下的式子:

\[i - a_i = j - a_j
\]

因此我们可以把原数组转换一下,第 \(i\) 项 \(a_i\) 变成 \(i - a_i\),所有处理后值相同的点之间都会有一条边,形成一个完全图,我们可以把这些点全部塞进一个 map 中。

map<int,vector<int> >Edge;

for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
Edge[a[i]-i].push_back(a[i]);
}

然后开始分别处理每一个完全子图。由于要我们求无向图的匹配,一个点不会被选超过两次,所以我们可以把所有点按照点权从大到小排序,每一次选择一对点,判断这两个点的和是否为正数,如果是,那么就一定选,否则直接 break 即可。

for(auto it:Edge){
vector<int>E=it.second;
sort(begin(E),end(E),[](int a,int b){return a>b;});
int a=0x3f3f3f3f,b=0x3f3f3f3f;
for(auto it:E){
if(a==0x3f3f3f3f){
a=it;
}else{
b=it;
if(a+b>0) ans+=a+b,a=b=0x3f3f3f3f;
else break;
}
}
}

完整 Code

#include <bits/stdc++.h>
#define int long long
using namespace std; map<int,vector<int> >Edge;
int T,n,a[500005],ans; signed main()
{
scanf("%lld",&T);
while(T--){
Edge.clear();ans=0;
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
Edge[a[i]-i].push_back(a[i]);
}
for(auto it:Edge){
vector<int>E=it.second;
sort(begin(E),end(E),[](int a,int b){return a>b;});
int a=0x3f3f3f3f,b=0x3f3f3f3f;
for(auto it:E){
if(a==0x3f3f3f3f){
a=it;
}else{
b=it;
if(a+b>0) ans+=a+b,a=b=0x3f3f3f3f;
else break;
}
}
}
printf("%lld\n",ans);
}
return 0;
}

P9562 [SDCPC2023] G-Matching 题解的更多相关文章

  1. [题解] Atcoder Beginner Contest ABC 270 G Ex 题解

    点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...

  2. [LeetCode] Wildcard Matching 题解

    6. Wildcard Matching 题目 Implement wildcard pattern matching with support for '?' and '*'. '?' Matche ...

  3. G - Pyramid 题解(打表)

    题目链接 题目大意 t组数据,给你一个n(n<=1e9)求高度为n的等边三角形,求里面包含了多少个等边三角形 题目思路 打表找规律,然而我一直没找到规律. 看到题解恍然大悟,答案就是C(n+3, ...

  4. Codeforces Round #744 (Div. 3) G题题解

    淦,最后一道题没写出来,...还是我太菜了,不过这个题确实比较有趣. G. Minimal Coverage 简化题意:就是你处在坐标轴的0点上,给你一个序列\(a_i\),每次你可以选择向左走\(a ...

  5. AtCoder Beginner Contest 220部分题(G,H)题解

    刚开始的时候被E题卡住了,不过发现是个数学题后就开始使劲推式子,幸运的是推出来了,之后的F题更是树形DP换根的模板吧,就草草的过了,看了一眼G,随便口胡了一下,赶紧打代码,毕竟时间不多了,最后也没打完 ...

  6. Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解

    题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很 ...

  7. SWPU-ACM集训队周赛之组队赛(3-11)G题题解

    点这里去做题 水水水水水,不难发现如下表 t 1 2 3 4 v 1 3 5 7 s 1 4 9 16 明显s=t*t 题目中对10000取模即取后四位,即对1000取余 #include<st ...

  8. 2016 ACM-ICPC 青岛站网络赛G题 题解

    [参考博客][https://blog.csdn.net/Tawn0000/article/details/82255682] 题意: 将n个数按照每k个一组来合并,合并需要花费的cost是两个数的长 ...

  9. 福建工程学院第十四届ACM校赛G题题解

    外传:编剧说了不玩游戏不行 题意: 有n个石堆,我每次只能从某一堆中取偶数个石子,你取奇数个,我先手,先不能操作的人输.问最后谁能赢. 思路: 这个题仔细想想,就发现,取奇数的人有巨大的优势,因为假设 ...

  10. O - Matching 题解(状压dp)

    题目链接 题目大意 给你一个方形矩阵mp,边长为n(n<=21) 有n个男生和女生,如果\(mp[i][j]=1\) 代表第i个男生可以和第j个女生配对 问有多少种两两配对的方式,使得所有男生和 ...

随机推荐

  1. C#项目管理引用的dll文件

    这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期使用. 设置dll路径 参考C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁中间的 方法一:配置App.config文件的pri ...

  2. manjaro安装/卸载gnome/kde桌面环境

    安装gnome桌面环境 步骤 1. 在运行以下教程之前,请确保我们的系统是最新的: sudo pacman -Syu 步骤 2. 在 Manjaro 20 上安装 GNOME 桌面. 现在我们通过执行 ...

  3. 麦克风阵列技术-beaforming开源算法源码分析

    概述   在音频前端处理算法中,beamforming算法是一个无法绕过的存在,随着AI技术的广泛发展,前端语音技术的需求也在呈现个性化的动态范围.作为一个深耕音频算法多年的老兵,发现站在巨人的肩膀上 ...

  4. .Net实现Html保存到照片

    本文将使用PuppeteerSharp组件.实现Html代码片段生成Jpg照片 PuppeteerSharp项目地址:https://github.com/hardkoded/puppeteer-sh ...

  5. 记录--vue3函数式弹窗

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 最近接到一个需求,需要在一些敏感操作进行前要求输入账号和密码,然后将输入的账号和密码加到接口请求的header里面.如果每个页面都去 ...

  6. KafkaConsumerDemo

    pom <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>sp ...

  7. KingbaseES 可更新的视图

    可更新视图 可简化视图可自动更新:系统将允许在视图上使用 INSERT.UPDATE 和 DELETE 语句,就像在常规表上一样.如果视图满足以下所有条件,就是可简化视图,则视图可自动更新: 该视图的 ...

  8. Makefile 简单学习

    一.Makefile 简介 Makefile 是一种常用于编译的脚本语言.它可以更好更方便的管理你的项目的代码编译,节约编译时间(没改动的文件不编译).注意 Makefile 文件命令必须是 Make ...

  9. 才储性格测试(INTJ 专家型——追求能力与独立)

    INTJ 专家型--追求能力与独立 一.你的荣格理论图形 二.基本描述 才储分析:您的性格类型倾向为" INTJ "(内向 直觉 思维 判断 倾向度: I60 N56 T74 J5 ...

  10. Web服务器启用HTTPS的配置方法

    本文于2016年3月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. nginx的配置方法 可以参考Jerry Qu的本博客 Nginx 配 ...