裸题,如此之水…

Code:

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100000 + 4;
const int logn = 25;
int f[logn][maxn], head[maxn<<1], to[maxn<<1], nex[maxn<<1], val[maxn<<1], cnt,n,m, F[logn][maxn], G[logn][maxn], dep[maxn];
int minv,maxv;
inline void add_edge(int u,int v,int c)
{
nex[++cnt] = head[u], head[u] = cnt, to[cnt] = v,val[cnt] = c;
}
void dfs(int u,int fa,int c,int cur)
{
f[0][u] = fa, F[0][u] = G[0][u] = c, dep[u] = cur;
for(int v = head[u];v;v = nex[v])
if(to[v] != fa)dfs(to[v],u,val[v],cur + 1);
}
inline void solve(int a,int b)
{
if(dep[a] > dep[b]) swap(a,b);
minv = 50000000, maxv = 0;
if(dep[b] != dep[a])
{
for(int i = 22;i >= 0;--i)
if(dep[f[i][b]] >= dep[a])
{
minv = min(minv, F[i][b]);
maxv = max(maxv, G[i][b]);
b = f[i][b];
}
}
if(a == b) return;
for(int i = 22;i >= 0;--i)
{
if(f[i][a] != f[i][b])
{
minv = min(minv, min(F[i][a], F[i][b]));
maxv = max(maxv, max(G[i][a], G[i][b]));
a = f[i][a], b = f[i][b];
}
}
minv = min(minv, min(F[0][b], F[0][a]));
maxv = max(maxv, max(G[0][b], G[0][a]));
}
int main()
{
freopen("r.in","r",stdin);
freopen("r.out","w",stdout);
scanf("%d",&n);
for(int i = 1;i < n;++i)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add_edge(a,b,c);
add_edge(b,a,c);
}
dfs(1,0,0,1);
for(int i = 1; i < logn;++i)
{
for(int j = 1;j <= n;++j)
{
f[i][j] = f[i-1][f[i-1][j]];
F[i][j] = min(F[i-1][j], F[i-1][f[i-1][j]]);
G[i][j] = max(G[i-1][j], G[i-1][f[i-1][j]]);
}
}
scanf("%d",&m);
for(int i = 1;i <= m;++i)
{
int a,b;
scanf("%d%d",&a,&b);
if(a != b)
{
solve(a,b);
printf("%d %d\n",minv,maxv);
}
else printf("0 0\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}

SPOJ DISQUERY LCA + 倍增的更多相关文章

  1. SPOJ QTREE2 (LCA - 倍增 在线)

    You are given a tree (an undirected acyclic connected graph) with N nodes, and edges numbered 1, 2, ...

  2. 【codevs2370】小机房的树 LCA 倍增

    2370 小机房的树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0 ...

  3. LCA倍增算法

    LCA 算法是一个技巧性很强的算法. 十分感谢月老提供的模板. 这里我实现LCA是通过倍增,其实就是二进制优化. 任何一个数都可以有2的阶数实现 例如16可以由1 2 4 8组合得到 5可以由1 2 ...

  4. 洛谷 3379 最近公共祖先(LCA 倍增)

    洛谷 3379 最近公共祖先(LCA 倍增) 题意分析 裸的板子题,但是注意这题n上限50w,我用的边表,所以要开到100w才能过,一开始re了两发,发现这个问题了. 代码总览 #include &l ...

  5. CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先)

    CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先) 题意分析 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天, ...

  6. POJ.1986 Distance Queries ( LCA 倍增 )

    POJ.1986 Distance Queries ( LCA 倍增 ) 题意分析 给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b) ...

  7. POJ.1330 Nearest Common Ancestors (LCA 倍增)

    POJ.1330 Nearest Common Ancestors (LCA 倍增) 题意分析 给出一棵树,树上有n个点(n-1)条边,n-1个父子的边的关系a-b.接下来给出xy,求出xy的lca节 ...

  8. LCA(倍增在线算法) codevs 2370 小机房的树

    codevs 2370 小机房的树 时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点, ...

  9. LCA(最近公共祖先)——LCA倍增法

    一.前人种树 博客:最近公共祖先 LCA 倍增法 博客:浅谈倍增法求LCA 二.沙场练兵 题目:POJ 1330 Nearest Common Ancestors 代码: const int MAXN ...

随机推荐

  1. Cleaning

    Cleaning Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement There is a tr ...

  2. (27)Spring Boot Junit单元测试【从零开始学Spring Boot】

    Junit这种老技术,现在又拿出来说,不为别的,某种程度上来说,更是为了要说明它在项目中的重要性. 那么先简单说一下为什么要写测试用例 1. 可以避免测试点的遗漏,为了更好的进行测试,可以提高测试效率 ...

  3. EXPLAIN sql优化方法(1) 添加索引

    添加索引优化器更高效率地执行语句 假设我们有两个数据表t1和t2,每个有1000行,包含的值从1到1000.下面的查询查找出两个表中值相同的数据行: mysql> SELECT t1.i1, t ...

  4. 洛谷 P2896 [USACO08FEB]一起吃饭Eating Together

    P2896 [USACO08FEB]一起吃饭Eating Together 题目描述 The cows are so very silly about their dinner partners. T ...

  5. spring mvc中的@propertysource

    在spring mvc中,在配置文件中的东西,可以在java代码中通过注解进行读取了: @PropertySource  在spring 3.1中开始引入 比如有配置文件 config.propert ...

  6. 2015多校联合训练第一场Tricks Device(hdu5294)

    题意:给一个无向图,给起点s,终点t,求最少拆掉几条边使得s到不了t,最多拆几条边使得s能到t 思路: 先跑一边最短路,记录最短路中最短的边数.总边数-最短边数就是第二个答案 第一个答案就是在最短路里 ...

  7. Storm工作流程 vs. Spark Stream

    看的这个学习课程: http://study.163.com/course/courseLearn.htm?courseId=1002887002#/learn/video?lessonId=1003 ...

  8. HDU 1754 I Hate it (线段树最大值模板)

    思路:与我发表的上一遍求和的思想一样   仅仅是如今变成求最大值而已 AC代码: #include<iostream> #include<cstdio> #include< ...

  9. 2016.04.06,英语,《Vocabulary Builder》Unit 10

    put, from the Latin verb putare, meaning 'to think, consider, or believe'. reputation: [ˌrepju'teɪʃn ...

  10. 国内物联网平台初探(八):中移物联网开放平台OneNet

    平台定位 OneNET是中移物联网有限公司搭建的开放.共赢设备云平台,为各种跨平台物联网应用.行业解决方案,提供简便的云端接入.存储.计算和展现,快速打造物联网产品应用,降低开发成本. IoT Paa ...