题目链接

题目大意

给你一课树,要你给每一条边分权值,每条边的权值大于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. nacos 作为配置中心使用心得--配置使用

    1.页面配置 撇开原理不谈,先来介绍下nacos的基本使用,如下图nacos配置是以data id为单位进行使用的,基本上一个服务的一个配置文件就对应一个data id,支持的格式有xml,yaml, ...

  2. 基于Django的图书推荐系统和论坛

    基于Django的图书推荐系统和论坛 关注公众号"轻松学编程"回复"图书系统"获取源码 一.基本功能 登录注册页面 基于协同过滤的图书的分类,排序,搜索,打分功 ...

  3. python机器学习实现逻辑斯蒂回归

    逻辑斯蒂回归 关注公众号"轻松学编程"了解更多. [关键词]Logistics函数,最大似然估计,梯度下降法 1.Logistics回归的原理 利用Logistics回归进行分类的 ...

  4. 致萌新与不会用 NOI Linux 的 OIer

    全文绝大部分转载自:这篇好文章啊. 目录 1:GUIDE 2:Gedit 原文 打开 编译运行 3.Vim 3-1:这东西咋开啊 3-2:这东西咋用啊 4.编译与运行 5.调试 6.CSP竞赛中编写代 ...

  5. 内网渗透 day14-empire基础命令的使用

    empire的基础操作 目录 1. 建立监听器 2. 设置stagers 3. 用户交互 4. 提权 1. 建立监听器 help    查看帮助命令 listeners     查看监听器 useli ...

  6. 经典分治问题,平面N个点求最近点对

    大家好,我们今天来看一道非常非常经典的算法题--最近点对问题. 这个问题经常在各种面试当中出现,难度不低,很少有人能答上来.说实话,我也被问过,因为毫无准备,所以也没有答上来.是的,这道题有点神奇,没 ...

  7. vs code远程开发

    VS Code如何配置远程开发 你是如何远程开发的?还在使用FTP/SFTP同步文件?那你out了,有了宇宙第一IDE:VS就不需要这么麻烦了,一起学习一下吧. 第一步,安装Remote SSH插件 ...

  8. 对udp dns的思考2

    上一篇文章写道了udp 使用reuseport 多线程编程!!! 但是有几个问题需要考虑一下: 之前hash使用sip sport dip dport为key, 很正常同一个客户端回hash到同一个s ...

  9. Python博文_爬虫工程师是干什么的

    程序员有时候很难和外行人讲明白自己的工作是什么,甚至有些时候,跟同行的人讲清楚"你是干什么的"也很困难.比如我自己,就对Daivd在搞的语义网一头雾水.所以我打算写一篇博客,讲一下 ...

  10. 网络协议_7层_TCP/IP