挺裸的点分治

刚开始想用map水过去,然后做p次点分治,然后T到自闭

最后发现可以sort一遍,然后去重,记录每个数出现的次数,这样就可以双指针,不会漏掉了

 #include <bits/stdc++.h>
using namespace std; #define N 100010
int n, q, Q[N], ans[N];
struct Graph
{
struct node
{
int to, nx, w;
node() {}
node (int to, int nx, int w) : to(to), nx(nx), w(w) {}
}a[N << ];
int head[N], pos;
void add(int u, int v, int w)
{
a[++pos] = node(v, head[u], w); head[u] = pos;
a[++pos] = node(u, head[v], w); head[v] = pos;
}
}G;
#define erp(u) for (int it = G.head[u], v = G.a[it].to, w = G.a[it].w; it; it = G.a[it].nx, v = G.a[it].to, w = G.a[it].w) bool vis[N];
int root, sum, sze[N], f[N];
void getroot(int u, int fa)
{
sze[u] = , f[u] = ;
erp(u) if (v != fa && !vis[v])
{
getroot(v, u);
sze[u] += sze[v];
f[u] = max(f[u], sze[v]);
}
f[u] = max(f[u], sum - sze[u]);
if (f[u] < f[root]) root = u;
} int deep[N], d[N];
void getdeep(int u, int fa)
{
deep[++deep[]] = d[u];
erp(u) if (v != fa && !vis[v])
{
d[v] = d[u] + w;
getdeep(v, u);
}
} int g[N], num[];
void calc(int u, int cost, int opt)
{
d[u] = cost; deep[] = ;
getdeep(u, );
sort(deep + , deep + + deep[]);
g[] = ;
for (int i = ; i <= deep[]; ++i)
{
if (i == || deep[i] != deep[i - ]) g[++g[]] = deep[i], num[g[]] = ;
else ++num[g[]];
}
for (int i = ; i <= q; ++i)
{
for (int j = ; j <= g[]; ++j)
{
if (num[j] > && * g[j] == Q[i])
ans[i] += opt * num[j] * (num[j] - );
}
int r = g[];
for (int l = ; l < r; ++l)
{
while (l < r && g[l] + g[r] >= Q[i])
{
if (g[l] + g[r] == Q[i]) ans[i] += opt * num[l] * num[r];
--r;
}
}
}
} void solve(int u)
{
calc(u, , );
vis[u] = ;
erp(u) if (!vis[v])
{
calc(v, w, -);
sum = f[] = sze[v];
root = ;
getroot(v, u);
solve(root);
}
} void Run()
{
scanf("%d%d", &n, &q);
{
for (int i = , u, v, w; i < n; ++i)
{
scanf("%d%d%d", &u, &v, &w);
G.add(u, v, w);
}
for (int qq = ; qq <= q; ++qq) scanf("%d", Q + qq);
sum = n; f[] = n;
root = ;
getroot(, );
solve(root);
for (int i = ; i <= q; ++i) puts(ans[i] || !Q[i] ? "Yes" : "No");
}
} int main()
{
Run();
}

BZOJ 1316: 树上的询问的更多相关文章

  1. BZOJ 1316: 树上的询问( 点分治 + 平衡树 )

    直接点分治, 用平衡树(set就行了...)维护. -------------------------------------------------------------------------- ...

  2. BZOJ 1316: 树上的询问 (点分治+set)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1316 因为只要求存在某条路径长度为K,所以点分,然后用set判断差值是否在set中就可以了. ...

  3. [POJ 1316] 树上的询问

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1316 [算法] 点分治 由于边权较大,笔者在计算时使用了STL-set 注意当询问为 ...

  4. [BZOJ1316]树上的询问 点分治

    1316: 树上的询问 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1017  Solved: 287[Submit][Status][Discus ...

  5. BZOJ_1316_树上的询问_点分治

    BZOJ_1316_树上的询问_点分治 Description 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. Input 第一行两个整 ...

  6. 【BZOJ1316】树上的询问 点分治+set

    [BZOJ1316]树上的询问 Description 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. Input 第一行两个整数n, ...

  7. [bzoj1316]树上的询问_点分治

    树上的询问 bzoj-1316 题目大意:一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. 注释:$1\le n\le 10^4$,$1\ ...

  8. bzoj 3784: 树上的路径 堆维护第k大

    3784: 树上的路径 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 88  Solved: 27[Submit][Status][Discuss] ...

  9. BZOJ.3784.树上的路径(点分治 贪心 堆)

    BZOJ \(Description\) 给定一棵\(n\)个点的带权树,求树上\(\frac{n\times(n-1)}{2}\)条路径中,长度最大的\(m\)条路径的长度. \(n\leq5000 ...

随机推荐

  1. 解析IE, FireFox, Opera 浏览器支持Alpha透明的方法

    先请看如下代码: filter:alpha(opacity=50);       /* IE */  -moz-opacity:0.5;              /* Moz + FF */  op ...

  2. 剑指 offer set 14 打印 1 到 N 中 1 的个数

    总结 1. 假设 n == 2212, 算法分为两个步骤. 第一步, 将这个 2212 个数分为 1~ 212, 213 ~ 2212 2. 第一部分实际上是将 n 的规模缩小到 212. 假如知道如 ...

  3. Android "Please ensure that adb is correctly located at" 错误

    转自:http://blog.csdn.net/hyx1990/article/details/12681207 遇到问题描述: 运行Android程序控制台输出 [2013-10-13 16:45: ...

  4. HashMap实现原理、核心概念、关键问题的总结

    简单罗列一下较为重要的点: 同步的问题 碰撞处理问题 rehash的过程 put和get的处理过程 HashMap基础: HashMap的理论基础:维基百科哈希表 JDK中HashMap的描述:Has ...

  5. Linux命令之乐--md5sum

    md5sum命令用于生成和校验文件的md5值.它会逐位对文件的内容进行校验,它常用于检查文件的完整性. 读取文件的MD5值 [root@new ~]# md5sum /usr/local/sbin/* ...

  6. IOS7开发~新UI学起(二)

    本文转载至 http://blog.csdn.net/lizhongfu2013/article/details/9133281 1.UINavigationBar: NSDictionary* at ...

  7. css做鼠标指向图片图片放大但边框不放大

    这是一个圆形边框做的效果 HTML <div class="circle-wrapper"> <img src="" > </di ...

  8. 【黑金原创教程】【TimeQuest】【第五章】网表质量与外部模型

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  9. 探讨Java I/O类和接口

    (输出)Output:程序---->数据源(如某个文件) (输入)Input:数据源---->程序 Java.io定义的I/O类如下表所示: BufferedInputStream Buf ...

  10. ECharts使用(1)(转载)

    转载自http://www.cnblogs.com/Olive116/p/3634480.html 1.  EChart最新的文档目录. 首先创建一个解决方案,目录如下: 之前的一篇文章中讲到如果要使 ...