题目链接

题目大意

给你一课树,要你给每一条边分权值,每条边的权值大于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大(太坑了

代码

  1. #include<set>
  2. #include<map>
  3. #include<queue>
  4. #include<stack>
  5. #include<cmath>
  6. #include<cstdio>
  7. #include<vector>
  8. #include<string>
  9. #include<cstring>
  10. #include<iostream>
  11. #include<algorithm>
  12. #include<unordered_map>
  13. #define fi first
  14. #define se second
  15. #define debug printf(" I am here\n");
  16. using namespace std;
  17. typedef long long ll;
  18. typedef unsigned long long ull;
  19. typedef pair<int,int> pii;
  20. const ll INF=0x3f3f3f3f3f3f3f3f;
  21. const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
  22. const double eps=1e-10;
  23. int n, m, a[maxn];
  24. ll sz[maxn], p[maxn];
  25. int head[maxn],cnt;
  26. struct node{
  27. int to, next;
  28. }e[maxn<<1];
  29. void add(int u,int v){
  30. e[++cnt] = {v, head[u]};
  31. head[u] = cnt;
  32. }
  33. void dfs(int son,int fa){
  34. sz[son] = 1;
  35. for (int i = head[son]; i;i=e[i].next){
  36. if(e[i].to==fa) continue;
  37. dfs(e[i].to,son);
  38. sz[son] += sz[e[i].to];
  39. }
  40. }
  41. void init(){
  42. cnt = 0;
  43. for (int i = 1; i <= n;i++){
  44. head[i] = sz[i] = 0;
  45. }
  46. }
  47. signed main(){
  48. int _;scanf("%d", &_);
  49. while(_--){
  50. scanf("%d",&n);
  51. init();
  52. for (int i = 1,u,v; i <= n - 1;i++){
  53. scanf("%d%d", &u, &v);
  54. add(u, v), add(v, u);
  55. }
  56. scanf("%d", &m);
  57. for (int i = 1; i <= m;i++){
  58. scanf("%lld", &p[i]);
  59. }
  60. sort(p + 1, p + 1 + m);//从大到小
  61. reverse(p + 1, p + 1 + m);
  62. dfs(1,1);
  63. for (int i = 1; i <= n;i++){//先不要取模
  64. sz[i] = (sz[i]) * (n - sz[i]);
  65. }
  66. sort(sz + 1, sz + 1 + n);//从大到小
  67. reverse(sz + 1, sz + 1 + n);
  68. ll ans = 0;
  69. if(n-1>=m){
  70. for (int i = 1; i <= n-1;i++){
  71. if(i<=m){
  72. ans =(ans+ sz[i]%mod * p[i])%mod;
  73. }else{
  74. ans =(ans+ sz[i])%mod;
  75. }
  76. }
  77. }else{
  78. for (int i = 2; i <= m;i++){
  79. if(i<=m-n+2){
  80. p[1] = p[1] * p[i]%mod;
  81. }else{
  82. p[i-(m-n+2)+1] = p[i];
  83. }
  84. }
  85. for (int i = 1; i <= n-1; i++){
  86. ans = (ans + sz[i] * p[i]) % mod;
  87. }
  88. }
  89. printf("%lld\n", ans);
  90. }
  91. return 0;
  92. }

Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree 题解(贪心+易错)的更多相关文章

  1. Codeforces Round #665 (Div. 2) D - Maximum Distributed Tree dfs贡献记录

    题意: t组输入,每组数据中n个节点构成一棵树,然后给你n-1条边.给你一个m,然后给你m个k的素数因子,你需要给这n-1条边都赋一个权值,这n-1条边的权值之积应该等于k.如果k的素数因子数量小于n ...

  2. Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree (dfs计数,树)

    题意:给你含有\(n\)个节点,\(n-1\)条边的树,以及\(m\)个质数和\(1\),你需要在这\(m\)个质数和一个\(1\)选择数(质数只能选一次,\(1\)可以多选)给\(n-1\)条边赋值 ...

  3. Codeforces Round #665 (Div. 2)

     Codeforces Round #665 (Div. 2)  A. Distance and Axis 如果\(B\)在\(O\)左边,那么只能是定值\(OA\) 如果\(B\)在\(OA\)中间 ...

  4. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  5. Codeforces Round #524 (Div. 2)(前三题题解)

    这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...

  6. 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/ ...

  7. 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 ...

  8. 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 ...

  9. Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)

     E. Maximum Matching 题目链接:https://codeforces.com/contest/1038/problem/E 题意: 给出n个项链,每条项链左边和右边都有一种颜色(范 ...

随机推荐

  1. 一起学Vue:访问API(axios)

    目标 使用Vue+ElementUI+axios构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式. 什么是 axios? Axios 是一个基于 promise 的 HTTP 库,可以用 ...

  2. pycharm配置django rest framework

    安装django rest framework pip install 添加rest_framework app  在settings.py INSTALLED_APPS = [ 'django.co ...

  3. python机器学习卷积神经网络(CNN)

    卷积神经网络(CNN) 关注公众号"轻松学编程"了解更多. 一.简介 ​ 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人 ...

  4. Mybatis之plugin插件设计原理

    大多数框架,都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外. 我们从插件配置.插件编写.插件运行原理.插件注册与执行拦截的时机.初始化插件.分页插件的原理等六个方面展开阐述. 一 ...

  5. c# sqlhlpear

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  6. mysql 触发器的创建和使用

    什么是触发器 触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持.该对象与编程语言中的函数非常类似,都需要声明.执行等.但是触发器的执行不是由程序调用,也不是由手工启动,而 ...

  7. 调度器简介,以及Linux的调度策略(转)

    进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...

  8. Tomcat配置管理员用户的账户和密码之快速访问系统。

      技巧前提:当我们在Tomcat服务器下部署项目后(运行中),有时候不知道项目的访问路径或者不想去server.xml里面找对应的访问路径时.   我们可以用以下方法来快速找到对应访问路径: 步骤一 ...

  9. cephfs元数据池故障的恢复

    前言 cephfs 在L版本已经比较稳定了,这个稳定的意义个人觉得是在其故障恢复方面的成熟,一个文件系统可恢复是其稳定必须具备的属性,本篇就是根据官网的文档来实践下这个恢复的过程 实践过程 部署一个c ...

  10. cephfs删除报nospace的问题

    ceph Vol 45 Issue 2 CephFS: No space left on device After upgrading to 10.2.3 we frequently see mess ...