COGS——T 803. [USACO Hol10] 政党 || 1776: [Usaco2010 Hol]cowpol 奶牛政坛
http://www.lydsy.com/JudgeOnline/problem.php?id=1776||http://cogs.pro/cogs/problem/problem.php?pid=803
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 507 Solved: 246
[Submit][Status][Discuss]
Description

Input
Output
Sample Input
1 3
2 1
1 0
2 1
2 1
1 5
Sample Output
2
HINT
Source
距离最远的两个点之中,一定有一个是在当前政党中深度最深的,枚举另一个点,更新政党范围
mdzz我居然用点编号和深度去比较!!
- #include <cstdio>
- const int N(2e5+);
- int a[N],p[N],deps[N],ans[N];
- int head[N],sumedge;
- struct Edge
- {
- int v,next;
- Edge(int v=,int next=):v(v),next(next){}
- }edge[N<<];
- inline void ins(int u,int v)
- {
- edge[++sumedge]=Edge(v,head[u]);
- head[u]=sumedge;
- edge[++sumedge]=Edge(u,head[v]);
- head[v]=sumedge;
- }
- #define max(a,b) (a>b?a:b)
- #define swap(a,b) {int tmp=a;a=b,b=tmp;}
- int dad[N],dep[N],size[N],son[N],top[N];
- void DFS(int u)
- {
- size[u]=;
- dep[u]=dep[dad[u]]+;
- for(int v,i=head[u];i;i=edge[i].next)
- {
- v=edge[i].v;
- if(dad[u]==v) continue;
- dad[v]=u; DFS(v); size[u]+=size[v];
- if(size[son[u]]<size[v]) son[u]=v;
- }
- }
- void DFS_(int u,int Top)
- {
- top[u]=Top;
- if(son[u]) DFS_(son[u],Top);
- for(int v,i=head[u];i;i=edge[i].next)
- {
- v=edge[i].v;
- if(dad[u]!=v&&son[u]!=v) DFS_(v,v);
- }
- }
- int LCA(int x,int y)
- {
- for(;top[x]!=top[y];y=dad[top[y]])
- if(dep[top[x]]>dep[top[y]]) swap(x,y);
- return dep[x]<dep[y]?x:y;
- }
- inline void read(int &x)
- {
- x=; register char ch=getchar();
- for(;ch>''||ch<'';) ch=getchar();
- for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-'';
- }
- inline void write(int x)
- {
- if(x/) write(x/);
- putchar(x%+'');
- }
- int AC()
- {
- // freopen("cowpol.in","r",stdin);
- // freopen("cowpol.out","w",stdout);
- int n,k,rt; read(n),read(k);
- for(int i=;i<=n;i++)
- {
- read(a[i]),read(p[i]);
- if(!p[i]) rt=i;
- else ins(p[i],i);
- }
- DFS(rt); DFS_(rt,rt);
- for(int i=;i<=n;i++)
- if(dep[i]>dep[deps[a[i]]]) deps[a[i]]=i;
- for(int lca,i=;i<=n;i++)
- {
- lca=LCA(i,deps[a[i]]);
- ans[a[i]]=max(ans[a[i]],dep[i]+dep[deps[a[i]]]-dep[lca]*);
- }
- for(int i=;i<=k;i++)
- write(ans[i]),puts("");
- return ;
- }
- int I_want_AC=AC();
- int main(){;}
COGS——T 803. [USACO Hol10] 政党 || 1776: [Usaco2010 Hol]cowpol 奶牛政坛的更多相关文章
- bzoj:1776: [Usaco2010 Hol]cowpol 奶牛政坛
Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片 ...
- bzoj 1776: [Usaco2010 Hol]cowpol 奶牛政坛——树的直径
农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可以抵达其他所 ...
- 【BZOJ】1776: [Usaco2010 Hol]cowpol 奶牛政坛
[题意]给定n个点的树,每个点属于一个分类,求每个分类中(至少有2个点)最远的两点距离.n<=200000 [算法]LCA [题解]结论:树上任意点集中最远的两点一定包含点集中深度最大的点(求树 ...
- BZOJ 1776: [Usaco2010 Hol]cowpol 奶牛政坛 LCA + 树的直径
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...
- 【BZOJ1776】[Usaco2010 Hol]cowpol 奶牛政坛 树的直径
[BZOJ1776][Usaco2010 Hol]cowpol 奶牛政坛 Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N. ...
- [bzoj1776][Usaco2010 Hol]cowpol 奶牛政坛_倍增lca
[Usaco2010 Hol]cowpol 奶牛政坛 题目大意: 数据范围:如题面. 题解: 第一想法是一个复杂度踩标程的算法..... 就是每种政党建一棵虚树,然后对于每棵虚树都暴力求直径就好了,复 ...
- [BZOJ1776][Usaco2010 Hol]cowpol 奶牛政坛
Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片 ...
- [Usaco2010 Hol]cowpol 奶牛政坛
题目描述: 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可 ...
- bzoj [Usaco2010 Hol]cowpol 奶牛政坛【树链剖分】
意识流虚树 首先考虑只有一个党派,那么可以O(n)求树的直径,步骤是随便指定一个根然后找距离根最远点,然后再找距离这个最远点最远的点,那么最远点和距离这个最远点最远的点之间的距离就是直径 那么考虑多党 ...
随机推荐
- 【【henuacm2016级暑期训练】动态规划专题 I】Gargari and Permutations
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意这k个序列每个都是排列. 如果在每个序列中都满足y出现在x之后的话. 那么我们从x连一条有向边至y (有一个序列不满足就不连 ( ...
- DQL查询语句使用(select)
9)DQL查询语句使用 SELECT语句在PL/SQL中使用,必须 采用下面用法: select id INTO 变量 from t001 where id=5; 将记录字段 ...
- 高级函数-case
case函数 (适合区间,>,<判断) case when 判断表达式 then when 判断表达式 then ..... end s ...
- (转)redis源代码分析 – event library
每个cs程序尤其是高并发的网络服务端程序都有自己的网络异步事件处理库,redis不例外. 事件库仅仅包括ae.c.ae.h,还有3个不同的多路复用(本文仅描述epoll)的wrapper文件,事件库封 ...
- ubuntu下使用Nexus搭建Maven私服
ubuntu下使用Nexus搭建Maven私服 1.私服简介: 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服, ...
- FPGA实现网络通信时的网络字节序问题
在上位机软件发送字符abcd 在鲨鱼上抓包 用逻辑分析仪从FPGA网络接收管脚分析 数据接收后存储在位宽为8bit的ram中 从ram中读32bitUDP数据为 64636261 依据以上那个现象, ...
- 关于Servo项目中Rust代码行数的数据来源
我两个月之前的一篇博客<为什么我说Rust是靠谱的编程语言>(下面简称原文),在当中"6. 两个半大型成功案例"一节.我以前写道: Servo: 下一代浏览器渲染引擎( ...
- [Python]threading local 线程局部变量小測试
概念 有个概念叫做线程局部变量.一般我们对多线程中的全局变量都会加锁处理,这样的变量是共享变量,每一个线程都能够读写变量,为了保持同步我们会做枷锁处理.可是有些变量初始化以后.我们仅仅想让他们在每一个 ...
- c#将List<T>转换成DataSet
/// <summary> /// List<T> 转换成DataSet /// </summary> /// &l ...
- 【c++版数据结构】之顺序表的实现
SeqList.h #ifndef SEQLIST_H #define SEQLIST_H #include<iostream> using namespace std; typedef ...