洛谷传送门

直接tarjan求scc,然后统计出度为0的缩点,如果多余1个就输出0,只有一个就输出这个缩点里的点。

——代码

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <stack>
  4.  
  5. using namespace std;
  6.  
  7. int n, m, cnt, idx, ans, k;
  8. int next[], to[], head[], low[], dfn[], belong[], c[];
  9. bool ins[];
  10. stack <int> s;
  11.  
  12. inline void add(int x, int y)
  13. {
  14. to[cnt] = y;
  15. next[cnt] = head[x];
  16. head[x] = cnt++;
  17. }
  18.  
  19. inline void tarjan(int u)
  20. {
  21. low[u] = dfn[u] = ++idx;
  22. s.push(u);
  23. ins[u] = ;
  24. int i, v;
  25. for(i = head[u]; i != -; i = next[i])
  26. {
  27. v = to[i];
  28. if(!dfn[v])
  29. {
  30. tarjan(v);
  31. low[u] = min(low[u], low[v]);
  32. }
  33. else if(ins[v]) low[u] = min(low[u], dfn[v]);
  34. }
  35. if(low[u] == dfn[u])
  36. {
  37. cnt++;
  38. do
  39. {
  40. v = s.top();
  41. s.pop();
  42. ins[v] = ;
  43. belong[v] = cnt;
  44. }while(u != v);
  45. }
  46. }
  47.  
  48. int main()
  49. {
  50. int i, j, x, y, u, v;
  51. memset(head, -, sizeof(head));
  52. scanf("%d %d", &n, &m);
  53. for(i = ; i <= m; i++)
  54. {
  55. scanf("%d %d", &x, &y);
  56. add(x, y);
  57. }
  58. cnt = ;
  59. for(i = ; i <= n; i++)
  60. if(!dfn[i])
  61. tarjan(i);
  62. for(u = ; u <= n; u++)
  63. for(i = head[u]; i != -; i = next[i])
  64. {
  65. v = to[i];
  66. if(belong[u] != belong[v]) c[belong[u]]++;
  67. }
  68. for(i = ; i <= cnt; i++)
  69. if(!c[i])
  70. {
  71. ans++;
  72. k = i;
  73. }
  74. if(ans > ) printf("");
  75. else
  76. {
  77. ans = ;
  78. for(i = ; i <= n; i++)
  79. if(belong[i] == k)
  80. ans++;
  81. printf("%d", ans);
  82. }
  83. return ;
  84. }

[HAOI2006]受欢迎的牛(tarjan缩点)的更多相关文章

  1. bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2092  Solved: 1096[Submit][Sta ...

  2. 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数

    [bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...

  3. bzoj1051 [HAOI2006]受欢迎的牛 tarjan&&缩点

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...

  4. [HAOI2006]受欢迎的牛 tarjan缩点 + 拓扑排序

    ---题面--- 题解: 首先tarjan缩点应该还是容易想到的,因为喜爱具有传递性,所以一个强联通分量里面的点实际上是全部等效的,所以我们可以缩成一个方便判断, 缩完点之后整张图就变成了一个有向无环 ...

  5. [HAOI2006]受欢迎的牛 tarjan缩点 BZOJ1051

    题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 ...

  6. bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 思路: 首先用Tarjan把环缩成点,要想收到所有人的欢迎,那么这个点的出度必为0,且 ...

  7. BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )

    tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...

  8. [BZOJ1051][HAOI2006] 受欢迎的牛 tarjan求联通分量

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5687  Solved: 3016[Submit][Sta ...

  9. [Bzoj1051][HAOI2006]受欢迎的牛(缩环)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6676  Solved: 3502[Submit][Sta ...

  10. 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点

    Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...

随机推荐

  1. 使用Appache部署WEB服务器

    Apache的起源(这个就不说了,百度下就都有了) 简介:Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行, ...

  2. Spring------自动化装配Bean(一)

    一.创建 CompactDisc接口和SgetPeppers实现类 CompactDisc接口方法为播放.SgtPeppers实现CompactDisc接口. package soundsystem; ...

  3. [转]Android 完美退出 App (Exit)

    本文转自:http://blog.csdn.net/zeus_9i/article/details/7259881 最近两天为了解决Android上面退出程序问题折腾了半死,在google & ...

  4. [转]写给Git初学者的7个建议

    本文转自:http://www.open-open.com/news/view/b7227e 阅读目录 第一条:花时间去学习 Git 的基本操作 第二条:从简单的 Git 工作流开始 第四条:理解分支 ...

  5. 解决spring boot websocket

    在网上找的demo写了一个小例子,本地开发测试都很正常,但是部署在tomcat就各种坑 1.MyWebSocket不要用spring 注解标注 2.main方法对应的类继承SpringBootServ ...

  6. [转]Android专家级别的面试总结

    Android专家级别的面试总结 2017年02月15日 16:56:28 阅读数:1225 1.. 自定义View流程 onMeasure, onLayout, onDraw, 采用深度优先,因为必 ...

  7. poj3616 Milking Time

    思路: dp. 实现: #include <iostream> #include <cstdio> #include <algorithm> using names ...

  8. Ubuntu 创建docker 容器 系列一

    docker 官网安装地址:https://docs.docker.com/install/linux/docker-ce/ubuntu/ 1.Ubuntu的版本要在12.04 LTS 以上,使用un ...

  9. Thrift入门及Java实例演示【转】

    概述 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++.Java.Python.PHP.Ruby.Erlang.Perl.Ha ...

  10. HYSBZ 1503 郁闷的出纳员 (Splay树)

    题意: 作为一名出纳员,我的任务之一便是统计每位员工的工资.但是我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反之,如果心情不好,就可能把他们的工资扣除 ...