HRBUST 2064:萌萌哒十五酱的宠物~(最近公共祖先LCA)
题意:一个n个点的树,询问某两点之间的简单路径,问路径上任选三边能否组成一个三角形。 N<100000,权值<109
思路:
这里最神奇的思路过于以下这个:
n个数,任意三个都不能组成三角形,只有当:
排序A,且A[i] >= A[i-1] + A[i-2];
观察可以发现其增长类似斐波那契,又因为权值<109,所以当路径里边的个数>=45个时,必然可以组成三角形。
剩下的,就暴力一下就好了。
确定路径边的个数的方法是深度结合lca来做。暴力的话就是两点向上攀,直到公共祖先。然后sort一下,然后检查是否存在 A[i] < A[i-1] + A[i-2]就好了。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100010 struct BCJ{
int fa[N];
void init(int n) {
for (int i = ; i <= n; i++) fa[i] = i;
}
void unin(int u, int v) {
fa[find(v)] = find(u);
}
int find(int u) {
return fa[u] == u? fa[u] : fa[u] = find(fa[u]);
}
}comFa;
struct faEdge{
int fa;
int c;
}fa[N];
int dep[N]; struct Graph{
struct Edge{
int to, next, c;
}e[N<<];
int head[N];
int p;
void init(){
memset(head, -, sizeof(head));
p = ;
}
void add(int u, int v, int len) {
e[p].to = v;
e[p].c = len;
e[p].next = head[u];
head[u] = p++;
}
}g, q; struct Query{
int s,t,com;
}que[N]; void dfs(int now) {
//printf("now = %d\n", now);
for (int i = g.head[now]; ~i; i = g.e[i].next) {
int &to = g.e[i].to;
//printf("to = %d\n", to);
if (dep[to] == -) {
dep[to] = dep[now]+;
fa[to].fa = now;
fa[to].c = g.e[i].c;
dfs(to);
comFa.unin(now,to);
}
}
for (int i = q.head[now]; ~i; i = q.e[i].next) {
int &to = q.e[i].to;
if (dep[to] != -) {
que[q.e[i].c].com = comFa.find(to);
}
}
} int a[N]; int main() {
int n;
while (scanf("%d", &n) != EOF) {
g.init();
for (int i = ; i < n-; i++) {
int a, b, len;
scanf("%d%d%d", &a, &b, &len);
g.add(a,b,len);
g.add(b,a,len);
} int m;
scanf("%d", &m);
q.init();
for (int i = ; i < m; i++) {
int s, t;
scanf("%d%d", &s, &t);
que[i].s = s;
que[i].t = t;
q.add(s,t,i);
q.add(t,s,i);
}
memset(dep, -, sizeof(dep));
dep[] = ;
fa[].fa = ;
fa[].c = ;
comFa.init(n);
dfs();
for (int i = ; i < m; i++) {
int nodeNum = dep[que[i].s] + dep[que[i].t] - *dep[que[i].com];
if (nodeNum >= ) {
puts("Yes");
} else {
int top = ;
for (int j = que[i].s; j != que[i].com; j = fa[j].fa) {
a[top++] = fa[j].c;
}
for (int j = que[i].t; j != que[i].com; j = fa[j].fa) {
a[top++] = fa[j].c;
}
sort(a,a+top);
bool ok = false;
for (int i = ; i < top; i++) {
if (a[i] < a[i-]+a[i-]) {
ok = true;
break;
}
}
puts(ok?"Yes":"No");
}
}
}
return ;
}
HRBUST 2064:萌萌哒十五酱的宠物~(最近公共祖先LCA)的更多相关文章
- HRBUST 2072:萌萌哒十五酱的礼物~(树,字典树)
题意:n个点的一棵树,树的边上有权值.一条路径的权值定义成这条路径上所有边的权值的xor.问所有路径的最大权值是多少. 思路: 首先,树上任意两点之间的路可以表示成 这两点到根节点的路- 其最近公共祖 ...
- HRBUST - 2069-萌萌哒十五酱的衣服~-multiset-lower_bound
众所周知,十五酱有很多的衣服,而且十五酱东西收拾的非常糟糕. 所以十五酱经常找不到合适的衣服穿,于是她觉得收拾一下屋子,把衣服配成一套一套的~(即一件衬衫一件裤子. 十五酱一共有n件衣服,有衬衫有裤子 ...
- 我的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- Bootstrap <基础二十五>警告(Alerts)
警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...
- Bootstrap<基础十五> 输入框组
Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...
- 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)
解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...
- 十五个常用的jquery代码段【转】
好的文章顶一个 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top 2 $('a.t ...
- 十五个常用的jquery代码段
十五个常用的jquery代码段 回到顶部按钮 通过使用 jQuery 中的 animate 和 scrollTop 方法,你无需插件便可创建一个简单地回到顶部动画: 1 // Back to top ...
随机推荐
- CF-1140 E - Palindrome-less Arrays
题意:给定一个没有填完的序列,数值为-1表示你可以用 1~k 中的数字去覆盖它,求将该序列填充后,不存在长度为奇数的回文串的方案数 分析: 使之不存在长度为奇数的回文串,只需要满足不存在长度为3的回文 ...
- 【Python学习之五】高级特性5(切片、迭代、列表生成器、生成器、迭代器)
5.迭代器 由之前的生成器可知,for循环用于可迭代对象:Iterable.包括集合数据类型: list.tuple.dict.set.str 等,以及两种生成器.判断迭代器,使用 isinstanc ...
- Vim如何显示和关闭行号
显示行号: set nu 去除行号: set nonu
- 【mac】【转发】Mac系统升级后,按大小写键没反应了,切换大小写的灯不亮了
Mac系统升级后发现caps lock 锁定大小写的键,失灵了,居然可以用来切换输入法了,经过一排查后, 使用以下几种方法处理: 方式一:长按 caps lock 键,来切换大小写 方式二:caps ...
- python导出开发环境
1.导出开发环境的依赖包 本地开发完后,再把代码给别人之前,需要 pip freeze > pip123.txt 2.其他环境安装依赖包 pip install -r pip123.txt 其他 ...
- 阿里云全国快递物流查询api接口
口地址: https://market.aliyun.com/products/56928004/cmapi021863.html?spm=5176.730005.productlist.d_cmap ...
- python3 简单服务器监控,自动发送邮件
import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartimpo ...
- python3通过Beautif和XPath分别爬取“小猪短租-北京”租房信息,并对比时间效率(附源代码)
爬虫思路分析: 1. 观察小猪短租(北京)的网页 首页:http://www.xiaozhu.com/?utm_source=baidu&utm_medium=cpc&utm_term ...
- 基于IAR6或者IAR7建立STM32开发工程(通过实际测试,使用IAR6.30.4)
IAR和keil两个开发平台都是arm开发当中比较流行的平台,keil4的版本之间,可以兼容,但是版本4和版本5还是不兼容的,但是IAR的兼容性更加差,好像6.30.x之间是能够兼容的吧,没有实测过, ...
- 【HIHOCODER 1176】 欧拉路·一
描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现在他们控制的角色来到了一个很大的湖边.湖上有N个小岛(编号1..N),以及连接小岛的 ...