Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree 题解(贪心+易错)
题目链接
题目大意
给你一课树,要你给每一条边分权值,每条边的权值大于0,他们的乘积等于k,而且要使得n-1条边1的数量尽可能少,定义
f(u,v)为u到v的边权和求 \(\max \sum_{i=1}^{i=n}\sum_{j=1}^{j=n} f(i,j)\)
k为m个质因子的乘积
题目思路
这显然是一个求贡献的裸题,但是里面有易错点
1:sort前不要先取模
2:还有要区分m可能比n-1大(太坑了
代码
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define fi first
#define se second
#define debug printf(" I am here\n");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-10;
int n, m, a[maxn];
ll sz[maxn], p[maxn];
int head[maxn],cnt;
struct node{
int to, next;
}e[maxn<<1];
void add(int u,int v){
e[++cnt] = {v, head[u]};
head[u] = cnt;
}
void dfs(int son,int fa){
sz[son] = 1;
for (int i = head[son]; i;i=e[i].next){
if(e[i].to==fa) continue;
dfs(e[i].to,son);
sz[son] += sz[e[i].to];
}
}
void init(){
cnt = 0;
for (int i = 1; i <= n;i++){
head[i] = sz[i] = 0;
}
}
signed main(){
int _;scanf("%d", &_);
while(_--){
scanf("%d",&n);
init();
for (int i = 1,u,v; i <= n - 1;i++){
scanf("%d%d", &u, &v);
add(u, v), add(v, u);
}
scanf("%d", &m);
for (int i = 1; i <= m;i++){
scanf("%lld", &p[i]);
}
sort(p + 1, p + 1 + m);//从大到小
reverse(p + 1, p + 1 + m);
dfs(1,1);
for (int i = 1; i <= n;i++){//先不要取模
sz[i] = (sz[i]) * (n - sz[i]);
}
sort(sz + 1, sz + 1 + n);//从大到小
reverse(sz + 1, sz + 1 + n);
ll ans = 0;
if(n-1>=m){
for (int i = 1; i <= n-1;i++){
if(i<=m){
ans =(ans+ sz[i]%mod * p[i])%mod;
}else{
ans =(ans+ sz[i])%mod;
}
}
}else{
for (int i = 2; i <= m;i++){
if(i<=m-n+2){
p[1] = p[1] * p[i]%mod;
}else{
p[i-(m-n+2)+1] = p[i];
}
}
for (int i = 1; i <= n-1; i++){
ans = (ans + sz[i] * p[i]) % mod;
}
}
printf("%lld\n", ans);
}
return 0;
}
Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree 题解(贪心+易错)的更多相关文章
- Codeforces Round #665 (Div. 2) D - Maximum Distributed Tree dfs贡献记录
题意: t组输入,每组数据中n个节点构成一棵树,然后给你n-1条边.给你一个m,然后给你m个k的素数因子,你需要给这n-1条边都赋一个权值,这n-1条边的权值之积应该等于k.如果k的素数因子数量小于n ...
- Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree (dfs计数,树)
题意:给你含有\(n\)个节点,\(n-1\)条边的树,以及\(m\)个质数和\(1\),你需要在这\(m\)个质数和一个\(1\)选择数(质数只能选一次,\(1\)可以多选)给\(n-1\)条边赋值 ...
- Codeforces Round #665 (Div. 2)
Codeforces Round #665 (Div. 2) A. Distance and Axis 如果\(B\)在\(O\)左边,那么只能是定值\(OA\) 如果\(B\)在\(OA\)中间 ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
- Codeforces Round #524 (Div. 2)(前三题题解)
这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...
- Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造
B. Invariance of Tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/576/ ...
- Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
B. Maximum Submatrix 2 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...
- Codeforces Round #276 (Div. 1) B. Maximum Value 筛倍数
B. Maximum Value Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/484/prob ...
- Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)
E. Maximum Matching 题目链接:https://codeforces.com/contest/1038/problem/E 题意: 给出n个项链,每条项链左边和右边都有一种颜色(范 ...
随机推荐
- 一起学Vue:访问API(axios)
目标 使用Vue+ElementUI+axios构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式. 什么是 axios? Axios 是一个基于 promise 的 HTTP 库,可以用 ...
- pycharm配置django rest framework
安装django rest framework pip install 添加rest_framework app 在settings.py INSTALLED_APPS = [ 'django.co ...
- python机器学习卷积神经网络(CNN)
卷积神经网络(CNN) 关注公众号"轻松学编程"了解更多. 一.简介 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人 ...
- Mybatis之plugin插件设计原理
大多数框架,都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外. 我们从插件配置.插件编写.插件运行原理.插件注册与执行拦截的时机.初始化插件.分页插件的原理等六个方面展开阐述. 一 ...
- c# sqlhlpear
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- mysql 触发器的创建和使用
什么是触发器 触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持.该对象与编程语言中的函数非常类似,都需要声明.执行等.但是触发器的执行不是由程序调用,也不是由手工启动,而 ...
- 调度器简介,以及Linux的调度策略(转)
进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...
- Tomcat配置管理员用户的账户和密码之快速访问系统。
技巧前提:当我们在Tomcat服务器下部署项目后(运行中),有时候不知道项目的访问路径或者不想去server.xml里面找对应的访问路径时. 我们可以用以下方法来快速找到对应访问路径: 步骤一 ...
- cephfs元数据池故障的恢复
前言 cephfs 在L版本已经比较稳定了,这个稳定的意义个人觉得是在其故障恢复方面的成熟,一个文件系统可恢复是其稳定必须具备的属性,本篇就是根据官网的文档来实践下这个恢复的过程 实践过程 部署一个c ...
- cephfs删除报nospace的问题
ceph Vol 45 Issue 2 CephFS: No space left on device After upgrading to 10.2.3 we frequently see mess ...