Codeforces 1091E


题意:给定n个点的度数,请你添加第n+1个点,输出所有可能的第n+1个点的度数

做法:1. 查看链接知道了下面这个定理

A sequence of non-negative integers $ d_1\geq\cdots\geq d_n$ can be represented as the degree sequence of a finite simple graph on \(n\) vertices if and only if $ d_1+\cdots+d_n$ is even and\(\sum _{i=1}^{k}d_{i}\leq k(k-1)+\sum _{i=k+1}^{n}\min(d_{i},k)\)
holds for every k in \({\displaystyle 1\leq k\leq n}\).

2.排序之后,\([low(p), up(p)]\) 表示在\([p, p+1]\) 之间插入新的点度数\(d_t\)的取值范围。

(1) \(d_{p+1} \leq d_t \leq d_p\)

(2) 当 \(d_t\) 在不等式左侧时
\[ d_t \leq k(k+1)+\sum _{i=k+1}^{n}\min(d_{i},k+1) - \sum _{i=1}^{k}d_{i}, p \leq k \leq n \\ \Downarrow \\ up(p) = min(up(p + 1) , p(p+1) + \sum_{i=p+1}^n min(d_i,p+1) - \sum_{i=1}^p d_i) \]

(3) 当 \(d_t\) 在不等式右侧时
\[ \sum_{i=1}^k d_i - k(k-1) - \sum_{i=k+1}^n min(d_i,k) <= d_t , 1 \leq k \leq p \\ \Downarrow\\ low(p) = max(\sum_{i=1}^p d_i - p(p-1) - \sum_{i=p+1}^n min(d_i,p), low(p-1)) \\ \]

3.猜测答案为连续的一段值,将上一步求出的区间并起来

4.又因为无向简单图,每条边对度数贡献为2,由此可以确定答案的奇偶性

5.确定上下界时,需要维护\(\sum_{i = k+1}^{n} min(d_i,k)\) 和\(\sum_{i = k}^{n} min(d_i,k)\) 我们倒着枚举\(k\),用优先队列维护小于等于当前\(k\)的集合,以及这个集合内所有元素的和,就可以预处理出这个式子,因为k是递减的因此保证了正确性

6.一定要分析清楚再写。。。代码细节很多

#include <bits/stdc++.h>
typedef long long ll;
constexpr int N = 600005;
constexpr ll inf = 1e18;
using namespace std;
int n;
priority_queue<ll> q;
ll f1[N], f2[N], sum[N], low[N], up[N], d[N];
int main() {scanf("%d",&n);for(int i = 1; i <= n; ++i) scanf("%lld",&d[i]);sort(d+1,d+1+n); reverse(d+1,d+1+n);for(int i = 1; i <= n; ++i) sum[i] = sum[i-1] + d[i];d[0] = n; d[n+1] = 0;for(int i = 0; i <= n; ++i) up[i] = inf, low[i] = -inf;ll tmp = 0;for(int i = n; i >= 0; --i) {while(!q.empty() && q.top() > i) tmp -= q.top(), q.pop();f2[i] = tmp + 1ll*(n - i - q.size())*i;if(d[i] <= i) q.push(d[i]), tmp += d[i];f1[i] = tmp + 1ll*(n - i + 1 - q.size())*i;}for(int i = n; i >= 0; --i) {if(i!=n) up[i] = min(up[i+1], 1ll*i*(i+1) + f1[i+1] - sum[i]);else up[i] = 1ll*i*(i+1) - sum[i];}for(int i = 1; i <= n; ++i) {low[i] = max(low[i-1], sum[i] - 1ll*i*(i-1) - f2[i]);}for(int i = 0; i <= n; ++i) low[i] = max(low[i], d[i+1]), up[i] = min(up[i], d[i]);ll L = inf, R = -inf;for(ll i = 0; i <= n; ++i) if(low[i] <= up[i]) L = min(L, low[i]), R = max(R, up[i]);if(L > R) printf("-1");for(ll i = L; i <= R; ++i) if(!((sum[n]-i)&1)) printf("%lld ",i);puts("");return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/10203438.html

Codeforces 1091E相关推荐

  1. Codeforces 1091E New Year and the Acquaintance Estimation Erdős–Gallai定理

    题目链接:E - New Year and the Acquaintance Estimation 题解参考: Havel–Hakimi algorithm 和 Erdős–Gallai theore ...

  2. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  3. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  4. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  5. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  6. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  7. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

  8. codeforces A. Jeff and Digits 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...

  9. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

最新文章

  1. Environment variable ORACLE_UNQNAME not defined错误解决
  2. 二级联动,三级联动,初学者,纯javascript,不含jQuery
  3. 如何在结构体里面套结构体_Rust 学习笔记-13 Rust 结构体
  4. c 调用GetConsoleWindow () 几个解决方法
  5. hash冲突的解决方法
  6. bin2hex() 函数
  7. 姿态估计论文汇总 Stacked Hourglass/CPN/Simple Baselines/MSPN/HRNet
  8. 吴恩达:还没有人能完全理解人工智能,包括谷歌和百度
  9. WebRTC和APP互通连麦直播
  10. 多核时代多线程编程(一)基本策略
  11. the info.plist in the package must contain the CFBundleShortVersionString key.
  12. 在云端管理您的所有身份(AAD)-第一部分
  13. 大华DSS视频综合应用平台webservice接口使用手册-php测试用例
  14. 二、为jupyter notebook 添加标题
  15. 【CG物理模拟】风筝模拟
  16. 可以模拟人工操作的软件;如访问网页,在网页中自动获取固定信息等
  17. Java阿凯_Java-7 面向对象(上)
  18. 手把手教你用 wxPython 设计一个可以弹琴的计算器
  19. 【报告分享】2022年中国游戏产业趋势及潜力分析报告-伽马数据(附下载)
  20. 6.ES中什么是索引(ES中的索引指的是库)的分片和备份(副本)?ES中的关键词有哪些? 嘻哈的简写笔记——Elastic Search

热门文章

  1. 河南信息工程学校计算机组装比赛,计算机技术系承办2019全员化试点项目计算机网络装调赛项...
  2. leetcode541. 反转字符串 II
  3. [Spring5]IOC容器_Bean管理注解方式_完全注解开发
  4. uml类图例子_转:(中文命名)UML类图新手入门级介绍
  5. math:线性代数之行列式
  6. acwing199.余数之和(除法分块)
  7. 2021牛客第一场 K.Knowledge Test about Match
  8. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)
  9. P1712 [NOI2016]区间
  10. CF1479A Searching Local Minimum