【题目链接】

点击打开链接

【算法】

tarjan算法求LCA

【代码】

  1. #include<bits/stdc++.h>
  2. #define MAXN 200010
  3. #pragma GOC optimize("O2")
  4.  
  5. using namespace std;
  6.  
  7. int n,k,i,p,fa,q;
  8. int a[MAXN],visit[MAXN],parent[MAXN],maxn[MAXN],
  9. depth[MAXN],x[MAXN],y[MAXN],z[MAXN],ans[MAXN];
  10. vector<int> son[MAXN],vec[MAXN];
  11.  
  12. int find(int x) {
  13. if (parent[x] == x) return x;
  14. parent[x] = find(parent[x]);
  15. return parent[x];
  16. }
  17.  
  18. void dfs(int dep,int d) {
  19. int i;
  20. depth[dep] = d;
  21. for (i = ; i < son[dep].size(); i++)
  22. dfs(son[dep][i],d+);
  23. }
  24.  
  25. void tarjan(int u) {
  26. int i;
  27. parent[u] = u;
  28. visit[u] = ;
  29. for (i = ; i < vec[u].size(); i++) {
  30. if (y[vec[u][i]] == u && visit[x[vec[u][i]]]) z[vec[u][i]] = find(x[vec[u][i]]);
  31. if (x[vec[u][i]] == u && visit[y[vec[u][i]]]) z[vec[u][i]] = find(y[vec[u][i]]);
  32. }
  33. for (i = ; i < son[u].size(); i++) {
  34. if (!visit[son[u][i]]) {
  35. tarjan(son[u][i]);
  36. parent[son[u][i]] = u;
  37. }
  38. }
  39. }
  40.  
  41. int main() {
  42.  
  43. scanf("%d%d",&n,&k);
  44. for (i = ; i <= n; i++) {
  45. scanf("%d%d",&a[i],&p);
  46. if (p != ) son[p].push_back(i);
  47. else fa = i;
  48. }
  49.  
  50. dfs(fa,);
  51.  
  52. for (i = ; i <= n; i++) {
  53. if (depth[i] > depth[maxn[a[i]]])
  54. maxn[a[i]] = i;
  55. }
  56.  
  57. for (i = ; i <= n; i++) {
  58. if (maxn[a[i]] != i) {
  59. ++q;
  60. x[q] = maxn[a[i]];
  61. y[q] = i;
  62. vec[maxn[a[i]]].push_back(q);
  63. vec[i].push_back(q);
  64. }
  65. }
  66.  
  67. tarjan(fa);
  68.  
  69. for (i = ; i <= q; i++) {
  70. ans[a[x[i]]] = max(ans[a[x[i]]],depth[x[i]] + depth[y[i]] - * depth[z[i]]);
  71. }
  72. for (i = ; i <= k; i++) printf("%d\n",ans[i]);
  73.  
  74. return ;
  75.  
  76. }

【USACO】 奶牛政坛的更多相关文章

  1. 【BZOJ1776】[Usaco2010 Hol]cowpol 奶牛政坛 树的直径

    [BZOJ1776][Usaco2010 Hol]cowpol 奶牛政坛 Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N. ...

  2. USACO 奶牛抗议 Generic Cow Protests

    USACO 奶牛抗议 Generic Cow Protests Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望 ...

  3. [bzoj1776][Usaco2010 Hol]cowpol 奶牛政坛_倍增lca

    [Usaco2010 Hol]cowpol 奶牛政坛 题目大意: 数据范围:如题面. 题解: 第一想法是一个复杂度踩标程的算法..... 就是每种政党建一棵虚树,然后对于每棵虚树都暴力求直径就好了,复 ...

  4. [USACO]奶牛会展(背包)

    [USACO]奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览. ...

  5. 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 ...

  6. usaco 奶牛接力

    Description 为增强体质,约翰决定举办一场奶牛接力跑比赛.比赛现场有一些接力位置,这些位置间有T条路连接,第i条路的长度为Li. 有N头奶牛需要参加比赛,领头的奶牛从位置S出发,她会按照你的 ...

  7. usaco 奶牛集会 && 奶牛抗议

    奶牛集会 Description 约翰家的N头奶牛每年都会参加“哞哞大会” .哞哞大会是世界奶牛界的盛事.集会上 的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.当然,哞哞大叫肯定也包括在内. 奶牛 ...

  8. USACO奶牛博览会(DP)

    Description 奶牛想证明他们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N头奶牛进行了面试,确定了每头奶牛的智商和情商. 贝西有权选择让哪些奶牛参加展览.由于负的智商或情商会造成 ...

  9. USACO奶牛赛跑(逆序对)

    Description 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈 ...

随机推荐

  1. PSO(Thepopularity-similarity-oplimization) modol

    PSO(Thepopularity-similarity-oplimization) modol 在这篇文章里,我们试图将社交关系构成的网络结构从纷繁复杂的具体场景.细节条件中剥离出来,单单从个体间连 ...

  2. Unable to locate Attribute with the the given name [] on this ManagedType

    最近在写Springboot+hibernate的项目,遇到这个问题 好坑,查了半天没发现我哪里配置错了,后来发现实体类声明字段大小写敏感,把声明字段改成小写就行了

  3. 安装 node-sass 的不成功

    昨天安装项目依赖的包,差不多都装好了,然后就卡在了node-sass上,各种报错. 报错一.gyp ERR! stack Error: Can't find Python executable &qu ...

  4. 2017-10-29-morning-清北模拟赛

    T1 遭遇 #include <algorithm> #include <cstdio> #include <cmath> inline void read(int ...

  5. LSTM网络

    http://colah.github.io/posts/2015-08-Understanding-LSTMs/ https://www.jianshu.com/p/9dc9f41f0b29 机器学 ...

  6. hdu 1689 Alien’s Necklace (bfs层次图剪枝)

    Alien's Necklace Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. Python 一行命令ftp服务器

    Obligatory Twisted example: twistd -n ftp And probably useful: twistd ftp --help Usage: twistd [opti ...

  8. 安卓2.3 js解析问题 split()

    安卓2.3版本号解析错误,split和parseInt都会把09和08都解析成0,07下面解析没有问题.解决的方法是直接取个位数. function getYMD(yMd){ var dArray=n ...

  9. 自己定义html中a标签的title提示tooltip

    自己定义html中a标签的title提示tooltip 简单介绍 用简单的jquery+CSS创建自己定义的a标签title提示,用来取代浏览器默认行为.如图: watermark/2/text/aH ...

  10. 走入asp.net mvc不归路:[2]控制器概览

    asp.net mvc中最灵活的地方就是控制器,这里可以验证数据,可以跳转视图,还可以访问数据库等等.所以,我们要先从这里说起. 1 控制器就是继承了Controller的类,一般来说,类名后面都会增 ...