当思路是枚举+判断时,要尝试去推答案具有的性质,以优化算法。

一个政党中距离最大的那个点对中,一定有一个点是该政党中深度最大的。

预处理每个政党深度最大的节点,之后枚举另一个点。

// q.c#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int M=200000+10;
/****************************************************************************/
struct Edge {int u,v,nex; Edge() {}Edge(int a,int b,int c):u(a),v(b),nex(c) {}
}ed[M<<1];
int head[M],cnt;
void add_edge(int a,int b) {ed[cnt]=Edge(a,b,head[a]); head[a]=cnt++;ed[cnt]=Edge(b,a,head[b]); head[b]=cnt++;
}
/****************************************************************************/
int f[M],dep[M],size[M],son[M];
void dfs1(int u,int fa,int d) {f[u]=fa; dep[u]=d; size[u]=1;int i; Edge e;for(i=head[u];~i;i=ed[i].nex) {e=ed[i];if(!f[e.v]) {dfs1(e.v,u,d+1); size[u]+=size[e.v];if(size[e.v]>size[son[u]]||!son[u]) son[u]=e.v;}}
}
int top[M];
void dfs2(int u,int TP) {top[u]=TP; if(!son[u]) return ;dfs2(son[u],TP);int i; Edge e;for(i=head[u];~i;i=ed[i].nex) {e=ed[i];if(e.v!=f[u]&&e.v!=son[u]) dfs2(e.v,e.v);}
}
/****************************************************************************/
int lca(int a,int b) {while(top[a]!=top[b]) {if(dep[top[a]]<dep[top[b]]) swap(a,b);a=f[top[a]];}return dep[a]<dep[b]?a:b;
}
/****************************************************************************/
int deep[M],nd[M],ans[M],party[M];
int main() {freopen("cowpol.in","r",stdin);freopen("cowpol.out","w",stdout);memset(head,-1,sizeof(head));memset(deep,-1,sizeof(deep));int n,k,b,rt;scanf("%d%d",&n,&k);for(int i=1;i<=n;i++) {scanf("%d%d",&party[i],&b);if(!b) { rt=i; continue; }add_edge(i,b);}dfs1(rt,-1,0); dfs2(rt,rt);for(int i=1;i<=n;i++) {if(dep[i]>deep[party[i]]) {deep[party[i]]=dep[i];nd[party[i]]=i;}}for(int i=1;i<=n;i++) {b=lca(i,nd[party[i]]);ans[party[i]]=max(ans[party[i]],dep[i]+deep[party[i]]-(dep[b]<<1));}for(int i=1;i<=k;i++) {printf("%d\n",ans[i]);}return 0;
}

转载于:https://www.cnblogs.com/qjs12/p/8891439.html

[USACO Hol10] 政党相关推荐

  1. 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=8 ...

  2. [USACO Hol10] 臭气弹 图上期望概率dp 高斯

    记住一开始和后来的经过是两个事件因此概率可以大于一 #include<cstdio> #include<iostream> #include<cstdlib> #i ...

  3. usaco Shaping Regions

    这就是usaco 前面的windows area的变形. /* ID:jinbo wu TASK:rect1 LANG:C++ */ #include<iostream> #include ...

  4. usaco Postal Vans(dp)

    是哈密顿回路,然后...就不知道怎么写了 ,以前写过类似的不过情况没这么多也没这么复 usaco training 6.1.1 Postal Vans 题解 标签: usaco training题解d ...

  5. usaco Beef McNuggets

    这两天贼烦,ccf炸了,还有一个烦心事.哎我都不知道自己能不能坚持下去了.马上期末考了.这段时间还是抓紧时间复习吧同时刷usaco的节奏要跟以前一样了,毕竟课少了. 题解: 只要你知道以下的数论结论, ...

  6. usaco前两章小结

    usaco 暑假老师有推荐做但是那个题目太长了,而且·大部分都是废话做起来特别慢,而且当时自己基本上什么都不懂,太难了所以看了题解做了两题就放弃了. 转眼就上学了,因为想学习acm所以就胡乱找题做但是 ...

  7. usaco ★Fractions to Decimals 分数化小数

    ★Fractions to Decimals 分数化小数 写一个程序,输入一个形如 N/D 的分数(N 是分子,D 是分母),输出它的小数形式. 如果小数有循环节的话,把循环节放在一对圆括号中.例如, ...

  8. usaco ★Bessie Come Home 回家

    ★Bessie Come Home 回家 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有 ...

  9. usaco Sorting a Three-Valued Sequence 三值的排序

    一开始想贪心,但是一想这是搜索章节应该用bfs?(为什么这么想看我上一个usaco的题目),,,,,,,,,,结果我贪心做出来了.然后我百度一下了别人做的好像么没人用bfs我不知道可不可以做出来. 思 ...

最新文章

  1. Java项目:学生选课系统(java+javaweb+jdbc)
  2. Hadoop2常用Shell命令
  3. Coursera公开课笔记: 斯坦福大学机器学习第四课“多变量线性回归(Linear Regression with Multiple Variables)”
  4. Node.js 路由的简单使用
  5. 带有Hibernate OGM的NoSQL –第一部分:持久化您的第一个实体
  6. HTML+CSS+JS实现React简单的计算器实例
  7. STM8单片机ADC带缓存的连续采样模式
  8. Elasticsearch 嵌套类型nested
  9. cmake编译.a/.so/bin(一)
  10. Apache+tomcat集群
  11. window操作大全
  12. 凤凰系统基于android x x86,凤凰系统X86|Phoenix OS X86 V3.0.8.529官方版
  13. 微信一键激活 设置开卡字段
  14. 电子邮件营销实例---粽子
  15. 1条命令解决不能完成此操作,因为项目“Karabiner-Elements”已被锁定
  16. 微软上海,招 Partner 软件开发经理!
  17. AFL_qemu_mode
  18. sze品牌创始人的故事
  19. linux英汉字典代码,Ubuntu安装英汉词典(词库)详细步骤
  20. Scala数组函数二(dropRight~intersect)

热门文章

  1. 信息学奥赛一本通 1033:计算线段长度
  2. 采集CSI数据的实验
  3. CIO40: 2020年IT人员如何借机破局
  4. 如何让CDC类USB设备批量接收64字节以上数据
  5. (不打广告)推荐这款永久免费内网穿透软件-神卓互联
  6. 区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!
  7. 用c语言计算高考成绩,C语言计算距离高考剩余时间
  8. 十年饮冰,难凉热血--毕业四年多的经历,致敬每一位IT男
  9. 关于Mysql插入繁体字等特殊字符显示异常及查询异常
  10. 小猿圈python金角大王_小猿圈python学习-基本数据类型