bzoj3251
3251: 树上三角形
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 637 Solved: 262
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3 4 5
1 2
2 3
3 4
1 5
0 1 3
0 4 5
1 1 4
0 2 5
0 2 3
Sample Output
Y
Y
N
HINT
对于100%的数据,n,q<=100000,点权范围[1,231-1]
Source
这道题很脑洞。。。首先点权的范围不超过int,如果我们想构造一个序列,正好任意三个构不成三角形,则数列是这个样子的:f[n+2]=f[n+1]+f[n] 这就是斐波那契数列,n在50左右就爆int了,所以
当n>50说明肯定是满足的,直接输出Y,否则暴力判断是否存在
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 200010
struct edge
{
int to,nxt;
}e[N];
int n,q,cnt=;
int dep[N],head[N];
ll key[N];
int fa[N][];
inline bool cp(ll x,ll y)
{
return x<y;
}
inline void link(int u,int v)
{
e[++cnt].nxt=head[u];
head[u]=cnt;
e[cnt].to=v;
}
inline void change(int a,int b) { key[a]=b;}
inline void dfs(int u,int last)
{
for(int i=head[u];i;i=e[i].nxt) if(e[i].to!=last)
{
int v=e[i].to;
fa[v][]=u;
dep[v]=dep[u]+;
dfs(v,u);
}
}
inline int lca(int u,int v)
{
if(dep[u]<dep[v]) swap(u,v);
for(int i=;i>=;i--)
if((dep[u]-dep[v])&(<<i)) u=fa[u][i];
if(u==v) return u;
for(int i=;i>=;i--) if(fa[u][i]!=fa[v][i])
{
u=fa[u][i]; v=fa[v][i];
}
return fa[u][];
}
inline void query(int a,int b)
{
int x=lca(a,b);
if(dep[a]+dep[b]-*dep[x]+>)
{
puts("Y");
return;
}
vector<ll> num; num.clear();
for(int p=a;p!=x;p=fa[p][]) num.push_back(key[p]);
for(int p=b;p!=x;p=fa[p][]) num.push_back(key[p]);
num.push_back(key[x]);
if(num.size()<)
{
puts("N");
return;
}
sort(num.begin(),num.end(),cp);
for(int i=;i<num.size()-;i++) if(num[i]+num[i+]>num[i+])
{
puts("Y");
return;
}
puts("N");
} int main()
{
memset(fa,-,sizeof(fa));
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++) scanf("%d",&key[i]);
for(int i=;i<n;i++)
{
int u,v; scanf("%d%d",&u,&v);
link(u,v); link(v,u);
}
dfs(,);
for(int i=;i<=;i++)
for(int j=;j<=n;j++) if(fa[j][i-]!=-)
fa[j][i]=fa[fa[j][i-]][i-];
while(q--)
{
int opt,a,b; scanf("%d%d%d",&opt,&a,&b);
if(opt==) query(a,b);
if(opt==) change(a,b);
}
return ;
}
bzoj3251的更多相关文章
- 【BZOJ3251】树上三角形 暴力
[BZOJ3251]树上三角形 Description 给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形.同时还支持单点修改 ...
- BZOJ3251 : 树上三角形
BZOJ AC1000题纪念~~~ 将x到y路径上的点权从小到大排序 如果不存在b[i]使得b[i]+b[i+1]>b[i+2]则无解 此时b数列增长速度快于斐波那契数列,当达到50项时就会超过 ...
- BZOJ3251:树上三角形(乱搞)
Description 给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形.同时还支持单点修改. Input 第一行两个整数n ...
- 树上三角形 BZOJ3251
分析: 模拟赛T3,其实很水,当时出于某些原因,没有去写这道题... len>46必定有解 为了满足不是三角形,那么斐波那契数列是最优选择,而斐波那契数列的第46项超过了2^31-1,所以超过4 ...
- bzoj3251: 树上三角形(思维题)
神tmWA了8发调了20min才发现输出没回车T T... 首先考虑一段什么样的序列才会是N... 显然最长的形式就是斐波那契,前两数之和等于第三数之和,这样就无法组成三角形并且序列最长.可以发现在i ...
- 【bzoj3251】树上三角形 朴素LCA+暴力
题目描述 给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形.同时还支持单点修改. 输入 第一行两个整数n.q表示树的点数和操 ...
- [转载]hzwer的bzoj题单
counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...
- BZOJ刷题列表【转载于hzwer】
沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...
随机推荐
- BZOJ4553 - [TJOI2016]序列
Portal Description 给出一个\(n(n\leq10^5)\)个数的数列\(\{a_n\}\)和\(m(m\leq10^5)\)个形如\((x,y)\)的变化,表示\(a_x\)可以变 ...
- [NOIP2002] 提高组 洛谷P1033 自由落体
题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算公式为 d=1/2*g* ...
- hihoCoder #1014 : Trie树 [ Trie ]
传送门 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互 ...
- Method, apparatus and system for acquiring a global promotion facility utilizing a data-less transaction
A data processing system includes a global promotion facility and a plurality of processors coupled ...
- 2017多校Round5(hdu6085~hdu6095)
补题进度:7/11 1001(模意义下的卷积) 题意: 给出长度<=50000的两个数组A[] B[],保证数组中的值<=50000且A[]中数字两两不同,B[]中数字两两不同 有5000 ...
- lombok注解简化实体类getting 和 setting 方法
实体类注解,将以往的get/set方法简化为标签注解,让代码看着更简洁. Maven依赖: <dependency> <groupId>org.projectlombok< ...
- Office PDF如何批量删除书签
网上下了本PDF,不知道哪个傻逼每一页都做了一个书签,我真的想做个书签,看看自己做到哪一页都被搞乱了.狗日的,还没有批量删除功能. 方法就是,你定位到任意一个书签,然后按住Delete键,然后就可 ...
- Visual Studio VS如何切换代码自动换行
工具-选项-文本编辑器-自动换行
- maven导入dom4j以及jaxen.jar报java.lang.UnsupportedOperationException:错误
<dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> & ...
- OpenGL中视点模型坐标的理解
个人的理解: gluLookAt中的eye.center和up的坐标原点是ModelView中的坐标原点,右手坐标系,Z轴正向指向显示器外侧 glOrtho中的near和far参数距离相对eye而言, ...