挺裸的点分治

刚开始想用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. cocos2dx --- 富文本的使用 RichText

    在实际工作中,有非常多地方会使用 富文本,这里仅仅介绍最简单的富文本用法: 是由cocostudio 提供的 RichText: 直接贴代码,再分析: //这里測试富文本控件 ui::RichText ...

  2. request Dispatch

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  3. [转]Tcpcopy简介与实战

    Tcpcopy简介 TCPCopy是一种请求复制(所有基于tcp的packets)工具 ,其功能是复制在线数据包,修改TCP/IP头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从 ...

  4. freemarker0

    assign  用于为该模板页面 创建或替换一个顶层变量 或创建或替换多个顶层变量 列子如下 <#assign name=value [in namespacehash]>,指定一个名为n ...

  5. ios 开发之 -- UILabel的text竖行显示

    让UILabel的内容竖行显示,我经常用一下两种方式: 第一种:使用换行符 \n label.text = @"请\n竖\n直\n方\n向\n排\n列"; label.number ...

  6. FragmentStatePagerAdapter写法

    为了节省资源,分批加载数据//适配器class TabLayoutViewPagerAdapter extends FragmentStatePagerAdapter { public TabLayo ...

  7. mybatis 控制台打印出来的sql 执行结果为空 但是将sql放到mysql执行有数据

    mybatis中的sql如下 select airln_Cd airlnCd,city_coordinate_j cityCoordinateJ,city_coordinate_w cityCoord ...

  8. 三、Gradle初级教程——Gradle除了签名打包还能配置jar包

    1.gradle概念 构建工具,Groovy,Java. 2.gradle配置jar包,和libs文件夹导入jar包的区别 到此,还是这种方法导入JAR包比较方便.每次更新JAR包,只需要修改版本号就 ...

  9. C/C++ 智能指针简单剖析

    导读 最近在补看<C++ Primer Plus>第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑.C++面试过程中,很多面试官都喜欢问智能指针相关的问题 ...

  10. Django学习笔记第一篇--Hello,Django

    一.Django的安装: 1.python虚拟运行的环境的安装以及安装django: sudo pip install virtualenv export VIRTUALENV_DISTRINUTR= ...