题目链接

分析:树上的节点祖先与儿子的关系,一般就会想到dfs序。正解就是对树先进行dfs序排列,再将问题转化到树状数组统计个数。应该把节点按照权值从大到小排序,这样对于a[i],K/a[i]就是从小到大的顺序。这样更新树状数组就不会造成计算的混乱了。

多组数据没有每次先清除边我真是太智障了。

代码:

  1. /*****************************************************/
  2. //#pragma comment(linker, "/STACK:1024000000,1024000000")
  3. #include <map>
  4. #include <set>
  5. #include <ctime>
  6. #include <stack>
  7. #include <queue>
  8. #include <cmath>
  9. #include <string>
  10. #include <vector>
  11. #include <cstdio>
  12. #include <cctype>
  13. #include <cstring>
  14. #include <sstream>
  15. #include <cstdlib>
  16. #include <iostream>
  17. #include <algorithm>
  18. using namespace std;
  19. #define offcin ios::sync_with_stdio(false)
  20. #define sigma_size 26
  21. #define lson l,m,v<<1
  22. #define rson m+1,r,v<<1|1
  23. #define slch v<<1
  24. #define srch v<<1|1
  25. #define sgetmid int m = (l+r)>>1
  26. #define LL long long
  27. #define ull unsigned long long
  28. #define mem(x,v) memset(x,v,sizeof(x))
  29. #define lowbit(x) (x&-x)
  30. #define bits(a) __builtin_popcount(a)
  31. #define mk make_pair
  32. #define pb push_back
  33. #define fi first
  34. #define se second
  35. const int INF = 0x3f3f3f3f;
  36. const LL INFF = 1e18;
  37. const double pi = acos(-1.0);
  38. const double inf = 1e18;
  39. const double eps = 1e-9;
  40. const LL mod = 1e9+7;
  41. const int maxmat = 10;
  42. const ull BASE = 31;
  43. /*****************************************************/
  44. const int maxn = 1e5 + 5;
  45. int in[maxn], out[maxn], dfs_clock;
  46. int a[maxn], outdgree[maxn];
  47. int sum[maxn];
  48. std::vector<int> G[maxn];
  49. int N;
  50. LL K;
  51. struct Node {
  52. int val, id;
  53. bool operator <(const Node &rhs) const {
  54. return val < rhs.val;
  55. }
  56. }node[maxn];
  57. void init() {
  58. mem(sum, 0);
  59. mem(node, 0);
  60. mem(in, 0);
  61. mem(out, 0);
  62. mem(outdgree, 0);
  63. dfs_clock = 0;
  64. }
  65. void dfs(int u, int fa) {
  66. if (in[u]) return;
  67. in[u] = ++ dfs_clock;
  68. for (int i = 0; i < G[u].size(); i ++) {
  69. int v = G[u][i];
  70. if (v == fa) continue;
  71. dfs(v, u);
  72. }
  73. out[u] = dfs_clock;
  74. }
  75. void add(int x) {
  76. while (x <= N) {
  77. sum[x] ++;
  78. x += lowbit(x);
  79. }
  80. }
  81. int query(int x) {
  82. int res = 0;
  83. while (x) {
  84. res += sum[x];
  85. x -= lowbit(x);
  86. }
  87. return res;
  88. }
  89. int main(int argc, char const *argv[]) {
  90. int T;
  91. cin>>T;
  92. while (T --) {
  93. init();
  94. scanf("%d%I64d", &N, &K);
  95. for (int i = 1; i <= N; i ++) G[i].clear();
  96. for (int i = 1; i <= N; i ++) {
  97. scanf("%d", &node[i].val);
  98. node[i].id = i;
  99. }
  100. for (int i = 0; i < N - 1; i ++) {
  101. int u, v;
  102. scanf("%d%d", &u, &v);
  103. outdgree[v] ++;
  104. G[u].pb(v);
  105. G[v].pb(u);
  106. }
  107. sort(node + 1, node + N + 1);
  108. int root = 1;
  109. for (int i = 1; i <= N; i ++) if (!outdgree[i]) {
  110. root = i;
  111. break;
  112. }
  113. dfs(root, -1);
  114. int pos = 1;
  115. LL ans = 0;
  116. for (int i = N; i >= 1; i --) {
  117. LL tmp = K / (LL)node[i].val;
  118. int id = node[i].id;
  119. while (node[pos].val <= tmp && pos <= N)
  120. add(in[node[pos ++].id]);
  121. ans += query(out[id]) - query(in[id]);
  122. }
  123. cout<<ans<<endl;
  124. }
  125. return 0;
  126. }

hdu 5877/ 2016 ACM/ICPC Dalian Online 1010 Weak Pair的更多相关文章

  1. hdu 5868 2016 ACM/ICPC Asia Regional Dalian Online 1001 (burnside引理 polya定理)

    Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K ...

  2. 2016 ACM/ICPC Asia Regional Dalian Online 1010 Weak Pair dfs序+分块

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  3. HDU 5874 Friends and Enemies 【构造】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Friends and Enemies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  4. HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  5. HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  6. HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)

    Sparse Graph Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)To ...

  7. 2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  8. 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  9. HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

随机推荐

  1. http.Handler 与Go的错误处理

    原文地址    在之前我写过一篇关于通过使用http.HandlerFunc来实现一个定制handler类型用来避免一些平常的错误的文章.func MyHandler(w http.ResponseW ...

  2. jSP-13-其他

    1.    JAVAEE Ø  Java平台版本 Java平台有3个版本: 适用于小型设备和智能卡的JavaME (Java Platform Micro Edition,Java 微型版) 适用于桌 ...

  3. HAL驱动库学习-SPI

    如何使用SPI库1 声明SPI hanlde, 例如: SPI_HandleTypeDef hspi2 通过实现HAL_SPI_MspInit()函数初始化底层资源 以下两个必须进行初始化 a 使能s ...

  4. Head中的标签

    Head中的其它一些用法 1.scheme (方案) 说明:scheme can be used when name is used to specify how the value of conte ...

  5. 生产者-消费者问题【Java实现】

     生产者-消费者问题是经典的并发问题, 非常适合并发入门的编程练习.  生产者-消费者问题是指, 有若干个生产者和若干个消费者并发地读写一个或多个共享存储空间:生产者创建对象并放入到共享存储空间,消费 ...

  6. maven nexus

    部署nexus步骤: 1.下载解压安装包到指定目录 2.设置环境变量(当然还有JAVA,jdk) 3.在配置文件(G:\nexus\nexus-2.3.1-01-bundle\nexus-2.3.1- ...

  7. 【转】 Tomcat v7.0 Server at localhost was unable to start within 45

    转载地址:http://www.jsjtt.com/java/JavaWebkaifa/58.html Starting Tomcat v7.0 Server at localhost' has en ...

  8. EntityFramework Core 学习笔记 —— 包含与排除类型

    原文地址:https://docs.efproject.net/en/latest/modeling/included-types.html 在模型类中包含一种类型意味着 EF 拥有了这种类型的元数据 ...

  9. C# 4.0中dynamic的作用

    internal sealed class Coffee { public string GetName() { return "You selected Maxwell coffee.&q ...

  10. tar等

    tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c //打包-x //解压-f //指定文件-t //查看 tar ...