给定一棵有n个点的树

询问树上距离为k的点对是否存在。

AC code:

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 10005;
const int MAXM = 105;
const int MAXK = 10000005;
int n, m, q[MAXM];
int fir[MAXN], to[MAXN<<1], nxt[MAXN<<1], wt[MAXN<<1], cnt;
inline void read(int &num)
{
char ch; int flag=1;
while(!isdigit(ch=getchar()))if(ch=='-')flag=-flag;
for(num=ch-'0';isdigit(ch=getchar());num=num*10+ch-'0');
num*=flag;
}
inline void Add(int u, int v, int w) { to[++cnt] = v; nxt[cnt] = fir[u]; fir[u] = cnt; wt[cnt] = w; } int total, root, mx[MAXN], dis[MAXN], sz[MAXN];
bool vis[MAXN], Ans[MAXK], Exist[MAXK]; inline bool chkmax(int &x, int y) { return y > x ? x = y, 1 : 0; } void getroot(int u, int ff)
{
sz[u] = 1, mx[u] = 0;
for(int i = fir[u]; i; i = nxt[i])
if(to[i] != ff && !vis[to[i]])
getroot(to[i], u), sz[u] += sz[to[i]], chkmax(mx[u], sz[to[i]]);
chkmax(mx[u], total-sz[u]);
if(mx[u] < mx[root]) root = u;
}
int stk[MAXN], indx;
inline void dfs(int u, int ff)
{
stk[++indx] = dis[u];
for(int i = fir[u]; i; i = nxt[i])
if(to[i] != ff && !vis[to[i]])
dis[to[i]] = dis[u] + wt[i], dfs(to[i], u);
} int bin[MAXN], Cnt;
inline void solve(int u)
{
Exist[0] = 1;
for(int i = fir[u]; i; i = nxt[i])
if(!vis[to[i]])
{
dis[to[i]] = wt[i], dfs(to[i], u);
for(int j = 1; j <= indx; j++)
for(int k = 1; k <= m; k++)
if(q[k] >= stk[j]) Ans[k] |= Exist[q[k]-stk[j]];
while(indx) Exist[stk[indx]] = 1, bin[++Cnt] = stk[indx--];
}
while(Cnt) Exist[bin[Cnt--]] = 0;//注意这里memset会超时
} inline void divide(int u)
{
solve(u);
vis[u] = 1;
for(int i = fir[u]; i; i = nxt[i])
if(!vis[to[i]])
{
total = sz[to[i]], root = 0;
getroot(to[i], u), divide(to[i]);
}
} int main ()
{
read(n), read(m);
int x, y, z;
for(int i = 1; i < n; i++)
read(x), read(y), read(z), Add(x, y, z), Add(y, x, z);
for(int i = 1; i <= m; i++) read(q[i]);
total = n; mx[root=0] = n;
getroot(1, 0); divide(root);
for(int i = 1; i <= m; i++)
puts(Ans[i] ? "AYE" : "NAY");
}

最新文章

  1. iOS 最新版 CocoaPods 的安装流程
  2. C++中const关键字的使用总结
  3. iOS-观察者模式
  4. bootstrap-7
  5. 蓝牙Ibeacon室内定位和微信摇一摇周边原理分析
  6. asp.net 页面跳转传值的几种方式
  7. Ubuntu 13.10 Broadcom BCM4313问题
  8. dom操作中的js优化
  9. SVN服务器从Windows迁移到Linux
  10. Android自己主动化測试之Monkeyrunner用法及实例
  11. node.js版本管理
  12. 自定义ScrollView 实现上拉下拉的回弹效果--并且子控件中有Viewpager的情况
  13. C#获取IIS所有站点及虚拟目录和应用程序(包含名称及详细信息)
  14. java程序控制
  15. 快速切题 sgu117. Counting 分解质因数
  16. 22 网络编程--TCP和UDP实现聊天例子
  17. monkey初接触
  18. iOS - UIImageView - how to handle UIImage image orientation
  19. 03.CSS选择器--&gt;交集并集选择器
  20. pip安装模块时:error: command &#39;gcc&#39; failed with exit status 1

热门文章

  1. python 职责链模式
  2. B站动态转发抽奖脚本+教程
  3. 【LEETCODE】67、分治递归,medium&amp;hard级别,题目:215、312
  4. robotframework_酷我音乐_That Girl
  5. 「UER#2」信息的交换
  6. SPOJ Qtree系列
  7. 解决使用RabbitTemplate操作RabbitMQ,发生The channelMax limit is reached. Try later.问题
  8. Springcloud的版本依赖问题(最全,包含springCloud所有的版本)
  9. C#下IOC/依赖注入框架Grace介绍
  10. 3.使用 Code First 迁移更新数据库