CF985G Team Players
我敢赌,就算你知道怎么做,也必然得调试半天才能 AC。
[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription]

图片来自洛谷。
[Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis]
显然不可能正面计算。所以被迫正难则反。
把所有三元组分成四类:不考虑有没有边相连;有且只有一条边连接;有且只有两条边连接;三个点形成三元环。
每种情况分别考虑。
- 不考虑有没有边相连。
等价于对所有 ( i , j , k ) s.t. 0 ≤ i < j < k < n (i,j,k) \quad \text{s.t.} \quad 0 \leq i <j<k<n (i,j,k)s.t.0≤i<j<k<n 求出 ∑ legal (i,j,k) A i + B j + C k \sum\limits_{\text{legal (i,j,k)}} Ai+Bj+Ck legal (i,j,k)∑Ai+Bj+Ck。
枚举 k k k,则 ( i , j ) (i,j) (i,j) 只能在 [ 0 , k − 1 ] [0,k-1] [0,k−1] 中取值,共 k ( k − 1 ) 2 \dfrac{k(k-1)}{2} 2k(k−1) 种情况。
对于固定的 k k k, ∑ 0 ≤ i < j < k A i + B j = ∑ 0 ≤ i < k − 1 ( ∑ i < j < k A i + B j ) = ∑ 0 ≤ i < k − 1 ( A i ( k − i − 1 ) + ∑ i < j < k B j ) \sum\limits_{0 \leq i < j <k}Ai+Bj=\sum\limits_{0 \leq i < k-1}\left ( \sum\limits_{i<j<k}Ai+Bj \right )=\sum\limits_{0\leq i <k-1} \left ( Ai(k-i-1)+\sum\limits_{i<j<k}Bj\right ) 0≤i<j<k∑Ai+Bj=0≤i<k−1∑(i<j<k∑Ai+Bj)=0≤i<k−1∑(Ai(k−i−1)+i<j<k∑Bj)
然后把括号内的项展开,可以得到关于 ∑ i 2 \sum i^2 ∑i2, ∑ i \sum i ∑i 的式子,这些式子都是有公式可以 O ( 1 ) O(1) O(1) 计算的。 - 有且只有一条边连接的三元组。
枚举每条边 ( u , v ) s.t. u < v (u,v) \quad \text{s.t.} \quad u<v (u,v)s.t.u<v,则第三个点 w w w 只有三种情况: w < u < v w<u<v w<u<v, u < w < v u<w<v u<w<v, u < v < w u<v<w u<v<w。每种情况下 u , v u,v u,v 的贡献都是确定的,而 w w w 的和是连续正整数的和,可以用公式求出。
注意: 用这种方法求出的三元组包含了第三步和第四步的情况。因此,准确地说,第二种情况是有边相连的三元组。 - 有且只有两条边连接的三元组。
这是最不好想的一种情况。不仅容易漏掉,也不好想解决方法。
正解还是很惊艳的。三个点有且只有两条边连接,必然两条边有一个公共点。枚举这个公共点 u u u,那么 v , w v,w v,w 就只能在和 u u u 有边相连的点集中取值。
问题是,这个点集可能很大,怎么办?
那我们就不要同时考虑 v , w v,w v,w,仅考虑单个点对答案的贡献。
如果 v < u v<u v<u,那么 v v v 前面的系数可能是 A A A 或者 B B B(绝对不会是 C C C)。如果系数是 A A A,那么 w w w 比 v v v 大。在一个有限的点集中,我们很容易知道这样的 w w w 有多少个,因此 A v Av Av 的系数我们就可以求出来(请注意,我们只算 v v v 的贡献,至于 w w w 的和我们先不考虑)。其它情况同理。
枚举点集里的所有点,即可求出第三种情况的贡献。
注意: 第三步里也重复计算了第四步的情况。 - 有三条边连接的三元组。
这部分最简单了。直接用三元组计数的模板即可。
(当然,不会这个模板就是送命。)
现在来考虑容斥系数。分别记四个步骤算出来的结果为 S 1 , S 2 , S 3 , S 4 S_1,S_2,S_3,S_4 S1,S2,S3,S4。
- 所有的三元组都会在第一步中计算且仅计算一次。
- 第二步中,有且仅有一条边连接的三元组仅计算了一次,两条边相连的三元组计算了两次,三条边相连的三元组计算了三次。
- 第三步中,有两条边相连的二元组计算了一次;三条边相连的三元组计算了三次。
- 第四步中,三条边连接的三元组都仅计算了一次。
因此,通过你聪明的大脑,你一定可以发现,答案就是 S 1 − S 2 + S 3 − S 4 S_1-S_2+S_3-S_4 S1−S2+S3−S4。
就这么开心的写代码吧。小心细节不要 WA 哦。
Code \color{blue}{\text{Code}} Code
typedef unsigned long long ll; const int N=2e5+100; int n,m,A,B,C,u[N],v[N];
ll ans;
vector<int> edge[N],e[N];ll pre_sqr(int n){return 1ull*n*(n+1)/2*(2*n+1)/3;
}
ll pre_sum(int n){return 1ull*n*(n+1)/2;
}
ll get_sum(int a,int b){int t=(b-a+1);return 1ull*(a+b)*t/2;
}ll get_all(){ll cnt,tmp1,tmp2,res=0;for(int j=2;j<n;j++){
// 从 0 到 j-1 中选出两个数int i=j-1;//写着简单 cnt=pre_sum(i);tmp1=1ull*i*pre_sum(i-1)-pre_sqr(i-1);tmp2=pre_sqr(i);res+=1ull*tmp1*A;res+=1ull*tmp2*B;res+=1ull*cnt*C*j;}return res;
}//第一步ll get_minus(){ll res=0;for(int i=1;i<=m;i++){if (u[i]>v[i]) swap(u[i],v[i]);//(x, u[i], v[i])if (u[i]>0)res+=1ull*A*pre_sum(u[i]-1)+1ull*u[i]*(1ull*B*u[i]+1ull*C*v[i]);//(u[i], x, v[i])if (v[i]-u[i]>1)res+=1ull*B*get_sum(u[i]+1,v[i]-1)+(1ull*A*u[i]+1ull*C*v[i])*(v[i]-u[i]-1);//(u[i], v[i], x)if (v[i]<n-1)res+=1ull*C*get_sum(v[i]+1,n-1)+(1ull*A*u[i]+1ull*B*v[i])*(n-1-v[i]);} return res;
}//第三步int ind[N],vistime[N];ll get_triple(){ll res=0;for(int i=1;i<=m;i++){++ind[u[i]];++ind[v[i]];}for(int i=1;i<=m;i++){if (ind[u[i]]>ind[v[i]]) swap(u[i],v[i]);else if ((ind[u[i]]==ind[v[i]])&&(u[i]>v[i])) swap(u[i],v[i]);edge[u[i]].push_back(v[i]);}memset(vistime,-1,sizeof(vistime));//注意这里,不然可能会多算出一些三元组for(int i=0;i<n;i++){for(int j:edge[i]) vistime[j]=i;for(int j:edge[i])for(int k:edge[j])if (vistime[k]==i){//因为这里int t[]={i,j,k};sort(t,t+3);res+=1ull*A*t[0]+1ull*B*t[1]+1ull*C*t[2];}}return res;
}//第四步,三元环计数的板子ll get_add(){for(int i=1;i<=m;i++){e[u[i]].push_back(v[i]);e[v[i]].push_back(u[i]);}ll res=0;for(int u=0;u<n;u++){e[u].push_back(u);sort(e[u].begin(),e[u].end());int x=e[u].size()-1;if (x==0) continue;for(int i=0;i<=x;i++){int v=e[u][i];if (v<u)res+=1ull*A*v*(x-i-1)+1ull*B*v*i;else if (v>u)res+=1ull*B*v*(x-i)+1ull*C*v*(i-1);elseres+=1ull*v*(1ull*(x-i)*(x-i-1)/2*A+1ull*B*(x-i)*i+1ull*i*(i-1)/2*C); }}//第二步return res;
}int main(){n=read();m=read();A=read();B=read();C=read();for(int i=1;i<=m;i++){u[i]=read();v[i]=read();}ans=get_all()-get_minus()+get_add()-get_triple();cout<<ans<<endl;return 0;
}
最后,Good luck to you。
相关文章:
CF985G Team Players
我敢赌,就算你知道怎么做,也必然得调试半天才能 AC。 [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 图片来自洛谷。 [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 显然不可能正面计算。所以…...
企业经营决策风险
在企业的经营过程中,领导者每天都在面对大量的决策——该扩大生产还是收缩业务?该增设销售渠道还是提升产品质量?但你知道吗,企业最大的成本,不是生产成本,也不是人工成本,而是决策错误的成本&a…...
UE5蓝图实现打开和关闭界面、退出
Button_Back 和Button_Exit是创建的两个按钮事件。 1.Create Widget 创建界面(打开界面) 2.Add to Viewport 添加到视图 3.remove form Parent,Target:self 从父节点移除当前界面(关闭界面) 4.Quit Game 退…...
【Linux C】简单bash设计
主要功能 循环提示用户输入命令(minibash$)。创建子进程(fork())执行命令(execlp)。父进程等待子进程结束(waitpid)。关键问题 参数处理缺失:scanf("%s", buf)…...
安全是基石
“安全是基石”这句话强调了安全在个人、企业、社会等各个层面中的基础性和不可替代的重要性。无论是物理安全、网络安全、数据安全,还是生产安全、公共安全,都是保障稳定发展的前提。以下是不同领域中“安全”作为基石的体现: 1. 个人安全 基…...
JavaWeb 课堂笔记 —— 09 MySQL 概述 + DDL
本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖SpringMyBatisSpringMVCSpringBoot等)》,章节分布参考视频教程,为同样学习…...
echarts 图表
echart快速上手 快速上手 - 使用手册 - Apache EChartshttps://echarts.apache.org/handbook/zh/get-started/...
无线通信网
1.2.4G相邻信道间有干扰,5G相邻信道几乎无干扰 2.2.4G频段的优点是信号强,衰减小,穿墙强,覆盖距离远;缺点是带宽较窄,速度较慢,干扰较大。 5G频段的优点是带宽较宽,速度较快&#…...
数据结构:哈希表 | C++中的set与map
上回说到,红黑树是提升了动态数据集中频繁插入或删除操作的性能。而哈希表(Hash Table),则是解决了传统数组或链表查找数据必须要遍历的缺点。 哈希表 哈希表的特点就是能够让数据通过哈希函数存到表中,哈希函数能够将数据处理为表中位置的索…...
随笔 20250413 Elasticsearch 的 term 查询
你这个问题非常经典,来自于 Elasticsearch 的 term 查询是 ✅精确匹配(case-sensitive,大小写敏感)! 🧨 为什么查不到 "World"? 你的查询语句是: GET /movie/_search {&…...
容器初始化Spring Boot项目原理,即web项目(war)包涉及相关类对比详解
以下是关于 SpringBootServletInitializer、ServletContainerInitializer、SpringServletContainerInitializer、WebApplicationInitializer 和 ServletInitializer 的对比详解及总结表格: 1. 核心对比详解 (1) SpringBootServletInitializer 作用: S…...
Python创意:AI图像生成
1. 基本概念 AI 图像生成通常基于以下几种方法: 一.生成对抗网络 (GAN) 生成对抗网络(GAN,Generative Adversarial Network)是一种深度学习框架,主要用于生成新的、类似于训练数据的样本。自2014年由Ian Goodfellow及…...
[ctfshow web入门] web29
前置知识 eval: 把字符串按照 PHP 代码来执行,例如eval(“echo 1;”);这个函数拥有回显 system:使php程序执行系统命令,例如,system(“ls”);就是查看当前目录,这个拥有回显 preg_match:查找字符串是否匹配…...
5.JVM-G1垃圾回收器
一、什么是G1 二、G1的三种垃圾回收方式 region默认2048 三、YGC的过程(Step1) 3.1相关代码 public class YGC1 {/*-Xmx128M -XX:UseG1GC -XX:PrintGCTimeStamps -XX:PrintGCDetails -XX:UnlockExperimentalVMOptions -XX:G1LogLevelfinest128m5% 60%6.4M 75M*/private stati…...
Odrive0.5.1-FOC电机控制 arm_cos_f32.cpp arm_sin_f32.cpp代码实现(一)
01 查表法 在 our_arm_cos_f32 函数中,查表(Look-Up Table, LUT) 的核心是 预计算的正弦值表 sinTable_f32,通过巧妙利用余弦与正弦的相位关系实现快速余弦计算。以下是详细解析: 1. 查的是什么表? (1) 表内…...
机械臂只有位置信息是否可以进行手眼标定?
平常我在做手眼标定时,一般都是通过OpenCV的cv::calibrateHandEye函数进行求解,需要输入多组不同的机械臂位姿。今天遇到了一款舵机机器人,只能获取位置,得不到姿态信息,想着那就把姿态都设为0,结果求不出来…...
Python 数据分析01 环境搭建教程
Python 数据分析01 环境搭建教程 一、安装 Python 环境 访问 Python 官方网站 Python 官网,选择适合你操作系统的 Python 版本进行下载。下载完成后,运行安装程序。在安装过程中,建议选择“Add Python to PATH”选项,这样可以在…...
使用 Visual Studio 2022 (VS2022) 编译 FreeCAD 1.0.0 的详细教程
一、环境准备 官方教程:在 Windows 上编译 - FreeCAD Documentation Windows 10/11(推荐) git vs2022 cmake 3.26.4 Doxygen1.12 二、获取源码与依赖 版本关系 打开Git Bash或CMD,执行以下命令 git clone --recurse-sub…...
Java高性能并发利器-VarHandle
1. 什么是 VarHandle? VarHandle 是 Java 9 引入的类,用于对变量(对象字段、数组元素、静态变量等)进行低级别、高性能的原子操作(如 CAS、原子读写)。它是 java.util.concurrent.atomic 和 sun.misc.…...
蓝桥杯单片机频率
long int Freq; unsigned int Timer_1000Ms; 加上 TMOD | 0x05; void Timer0Init(void) //0毫秒12.000MHz {AUXR & 0x7F; //定时器时钟12T模式TMOD & 0xF0; //设置定时器模式TMOD | 0x05;TL0 0x00; //设置定时初值TH0 0x00; //设置定时初值TF0 0; //清除TF0标…...
【Qt】【第三方库】spdlog日志模块的使用
版本 spdlog版本:1.5.0 采用1.5.0版本主要基于以下考虑:兼容Qt5.9.X版本和兼容C11。 spdlog 1.5.0下载地址:https://github.com/gabime/spdlog/releases/tag/v1.5.0 摘要 在Qt应用程序开发中,良好的日志系统至关重要。本文将介…...
elementui table禁用全选,一次限制勾选一项。
1、设置属性:selection-change“handleSelectionChange” <el-table:data"taskList"ref"tableDataRefs"selection-change"handleSelectionChange":header-cell-class-name"hideAllCheckbox">function handleSelecti…...
3.1多状态专题:LeetCode面试题17.16 按摩师
动态规划解决按摩师预约问题——以LeetCode面试题17.16为例 1.题目链接 LeetCode面试题17.16 按摩师 2.题目描述 一个有名的按摩师收到一系列的预约请求,每个预约都可以选择接受或不接受。但相邻的预约不能同时接受。给定一个包含各预约时长的数组 nums…...
遵循IEC 62304:构建安全可靠的医疗器械软件
目录 一、IEC 62304 标准概述 1. 标准定位与适用范围 二、核心内容与要求 1. 软件安全等级(Software Safety Classification) (1)分级标准 (2)分级依据 (3)验证要求 2. 软件…...
互联网三高-数据库高并发之分库分表
1 数据库概述 1.1 数据库本身的瓶颈 ① 连接数 MySQL默认最大连接数为100,允许的最大连接数为16384 ② 单表海量数据查询性能 单表最好500w左右,最大警戒线800w ③ 单数据库并发压力问题 MySQL QPS:1500左右/秒 ④ 系统磁盘IO、CPU瓶颈 1.2 数…...
UE5 在UE中创建骨骼动画
文章目录 创建动画的三种方式修改骨骼动画 创建动画的三种方式 方法一 打开一个已有的动画,左上角“创建资产/创建动画/参考姿势” 这将创建一个默认的A字形的骨骼,不建议这么做 方法二 打开一个已有的动画,左上角“创建资产/创建动画/当前…...
Day-01 前端 Web - HTMLCSS
目录 一、HTML 基础 1. HTML 简介 2. HTML 基本结构 3. 常用 HTML 标签 二、CSS 基础 1. CSS 简介 2. CSS 引入方式 3. 常用 CSS 选择器 4. 常用 CSS 属性 一、HTML 基础 1. HTML 简介 HTML(HyperText Markup Language)即超文本标记语言&…...
AWS出海合规解决方案:全球业务扩张的技术指南
1. 引言 随着企业加速全球化进程,出海业务面临的合规挑战日益复杂。AWS作为全球领先的云服务提供商,为企业提供了强大的工具和服务,以帮助它们满足各国的合规要求。本文将探讨如何利用AWS服务构建全面的出海合规解决方案。 2. 全球数据合规挑战 在开始讨论具体解决方案之…...
[ctfshow web入门] web38
信息收集 过滤多了php和file if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag|php|file/i", $c)){include($c);echo $flag;}}else{highlight_file(__FILE__); }解题 更多解法参考 [ctfshow web入门] web37 我们选个最简单的。但是因为php被过滤了我们改用…...
汽车CAN总线采样点和采样率详解
写在前面 本篇文章主要讲解在汽车电子中CAN总线采样率的相关知识点,内容涉及CAN波特率、采样点、时间份额、同步跳转宽度以及采样率的计算。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 1、CAN波特率 CAN波特率常规分为250kbps和500kbps,本文章主要以这两个波特率为…...
