Codeforces Round #525 (Div. 2)后俩题
时间:2019-11-06
本文章向大家介绍Codeforces Round #525 (Div. 2)后俩题,主要包括Codeforces Round #525 (Div. 2)后俩题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
E:https://codeforces.com/contest/1088/problem/E
dp+贪心
题目大意:选择一个k并且选择k个连通块,
要求sigma a[i]/k最大,k尽量大,
对于给定的一颗树,输出最大的分数,不用约分的形式。
题目意思需要进一步解析,
假定有一个最大的连通块,那么
根据贪心的思想,肯定是选择这个连通块,但
又要求k大,所以把所有大小为这个连通块的dp值都计数一遍,
因为我们知道两个最大的连通块不可能有交集,
如果有,肯定是交集部分就是最大值部分,其余的部分都是零,
那么我们从下往上递归求解的过程中,其实也是一种贪心选取,
在计数完当前位置的dp值后,把该位置置为无穷小防止后面再被选取。
#include<bits/stdc++.h> using namespace std; #define pb push_back typedef long long ll; const int M=3e5+5; const ll INF=1e18; ll ans,cnt,dp[M],a[M]; vector<int>g[M]; void dfs(int u,int f,int sign){ dp[u]=a[u]; for(int i=0;i<g[u].size();i++){ int v=g[u][i]; if(v==f) continue; dfs(v,u,sign); dp[u]+=max(0ll,dp[v]); } if(sign==1){ ans=max(ans,dp[u]); } else if(dp[u]==ans) cnt++,dp[u]=-INF; } int main(){ int n; ans=-INF; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); for(int u,v, i=1;i<n;i++){ scanf("%d%d",&u,&v); g[u].pb(v); g[v].pb(u); } dfs(1,0,1); dfs(1,0,0); printf("%I64d %I64d",cnt*ans,cnt); return 0; }
原文地址:https://www.cnblogs.com/starve/p/11804957.html
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(2)RPD资料档案库创建
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(3)创建一个简单的分析
- 请查收!这里有一封信鸽传给您的信
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(4)创建多维钻取分析
- silverlight:RadMaskedTextBox设置MaskType="Numeric"及Mask="n"时的一个bug
- 微信里面最神秘的功能,你知道吗?
- 以大数据之名,变身!——In big data we trust
- 90%家长都不知道关于少儿编程的这些疑题!
- 常用SQL语句和语法汇总
- Python学习笔记1——斐波那契数列
- 视觉传感器几大技术要点详解!
- Spark之搜狗日志查询实战
- 区块链与数字货币是什么关系呢?
- 保存数据到MySql数据库——我用scrapy写爬虫(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现静默拍照功能
- Android实现动态体温计
- Android实现倾斜角标样式
- 浅谈Flutter 中渐变的高级用法(3种)
- Android实现左上角(其他边角)倾斜的标签(环绕效果)效果
- Android开发中Button组件的使用
- Android开发之基于RecycleView实现的头部悬浮控件
- Android如何通过命令行操作Sqlite3数据库的方法
- Android实现沉浸式状态栏功能
- PHP对验证码的认证过程
- Android实现图片加载进度提示
- android shape实现阴影或模糊边效果
- Spring Data JPA主键采用UUID策略
- Android自定义控件之水平圆点加载进度条
- Android屏幕旋转之横屏竖屏切换的实现