收获:

树上直径一定包含深度最深的点。

然后O(nlogn) 暴力。

 /**************************************************************
Problem: 1776
User: idy002
Language: C++
Result: Accepted
Time:2064 ms
Memory:31756 kb
****************************************************************/ #include <cstdio>
#include <vector>
#define maxn 200010
#define maxp 18
using namespace std; int n, m, root;
int anc[maxn][maxp+], dep[maxn];
vector<int> g[maxn];
vector<int> grp[maxn]; void dfs( int u ) {
for( int p=; p<=maxp; p++ )
anc[u][p]=anc[anc[u][p-]][p-];
for( int t=; t<g[u].size(); t++ ) {
int v=g[u][t];
anc[v][] = u;
dep[v] = dep[u]+;
dfs( v );
}
}
int lca( int u, int v ) {
if( dep[u]<dep[v] ) swap(u,v);
int t=dep[u]-dep[v];
for( int p=; t; t>>=,p++ )
if( t& ) u=anc[u][p];
if( u==v ) return u;
for( int p=maxp; anc[u][]!=anc[v][]; p-- )
if( anc[u][p]!=anc[v][p] )
u=anc[u][p],v=anc[v][p];
return anc[u][];
}
int main() {
scanf( "%d%d", &n, &m );
for( int i=,a,b; i<=n; i++ ) {
scanf( "%d%d", &a, &b );
grp[a].push_back( i );
if( b== ) root=i;
else g[b].push_back( i );
}
dep[root] = ;
anc[root][] = root;
dfs(root);
for( int i=; i<=m; i++ ) {
int md = grp[i][];
for( int t=; t<grp[i].size(); t++ )
if( dep[grp[i][t]]>dep[md] )
md=grp[i][t];
int u=md;
int ans=;
for( int t=; t<grp[i].size(); t++ ) {
int v=grp[i][t];
int ca=lca(u,v);
int dis = dep[u]+dep[v]-dep[ca]-dep[ca];
if( ans<dis ) ans=dis;
}
printf( "%d\n", ans );
}
}

bzoj 1776的更多相关文章

  1. bzoj:1776: [Usaco2010 Hol]cowpol 奶牛政坛

    Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片 ...

  2. bzoj 1776: [Usaco2010 Hol]cowpol 奶牛政坛——树的直径

    农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可以抵达其他所 ...

  3. BZOJ 1776: [Usaco2010 Hol]cowpol 奶牛政坛 LCA + 树的直径

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...

  4. bzoj usaco 金组水题题解(1)

    UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT. ...

  5. USACO 刷题记录bzoj

    bzoj 1606: [Usaco2008 Dec]Hay For Sale 购买干草——背包 #include<cstdio> #include<cstring> #incl ...

  6. 【BZOJ】1776: [Usaco2010 Hol]cowpol 奶牛政坛

    [题意]给定n个点的树,每个点属于一个分类,求每个分类中(至少有2个点)最远的两点距离.n<=200000 [算法]LCA [题解]结论:树上任意点集中最远的两点一定包含点集中深度最大的点(求树 ...

  7. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  8. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  9. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

随机推荐

  1. 绿色的宠物店cms后台管理系统模板——后台

    链接:http://pan.baidu.com/s/1c7qmsA 密码:2es8

  2. CRF++模板使用(转)

    CRF++模板构建分为两类,一类是Unigram标注,一类是Bigram标注. Unigram和Bigram模板分别生成CRF的状态特征函数  和转移特征函数  .其中  是标签,  是观测序列,   ...

  3. bootstrap table 双击可编辑,添加、删除行

    html: <table class="table table-bordered" id="para_table"> <tr> < ...

  4. Linux 上配置 NTP SERVER

    在CENTOS 6.2上面安装配置NTP SERVER 安装NTP:yum install ntp 配置时间源vi /etc/ntp.confserver 210.72.145.44server nt ...

  5. mysql delete 注意

    mysql中You can't specify target table <tbl> for update in FROM clause错误的意思是说,不能先select出同一表中的某些值 ...

  6. docvalue and fielddata

    大部分字段类型默认被索引的(inverted index),可以被搜索search: 哪个文档有这个词sort&aggregations: look up the document and f ...

  7. Cookie/Session的认识

    Cookie 1.cookie是什么? cookie是一小段文本,伴随着用户请求和页面在web服务器和浏览器之间传递,cookie包含每次用户访问站点时,web应用程序都可以读取的信息 2.为什么需要 ...

  8. SGU 209. Areas

    209. Areas time limit per test: 0.25 sec.memory limit per test: 65536 KB input: standardoutput: stan ...

  9. 猜数字游戏的提示(UVa340)

    题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...

  10. python中的计时器:timeit

    python中的计时器:timeit timeit 通常在一段程序的前后都用上time.time(),然后进行相减就可以得到一段程序的运行时间,不过python提供了更强大的计时库:timeit #导 ...