https://www.luogu.org/problemnew/show/2746

Tarjan 缩点

判断入度为0的点的个数与出度为0的点的个数的关系

注意全缩为一个点的情况

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7. const int N = ;
  8.  
  9. #define yxy getchar()
  10.  
  11. int n, now = , Tarjan_tim, Bel_tim, Top;
  12. int head[N], Low[N], Dfn[N], Out[N], In[N], Belong[N], Stack[N];
  13. bool vis[N];
  14. struct Node {int u, v, nxt;} G[N * N * ];
  15.  
  16. inline int read(){
  17. int x = ; char c = yxy;
  18. while(c < '' || c > '') c = yxy;
  19. while(c >= '' && c <= '') x = x * + c - '', c = yxy;
  20. return x;
  21. }
  22.  
  23. inline void add(int u, int v){
  24. G[now].v = v; G[now].nxt = head[u]; head[u] = now ++;
  25. }
  26.  
  27. void Tarjan(int u){
  28. Dfn[u] = Low[u] = ++ Tarjan_tim;
  29. vis[u] = ; Stack[++ Top] = u;
  30. for(int i = head[u]; ~ i; i = G[i].nxt){
  31. int v = G[i].v;
  32. if(!Dfn[v]){
  33. Tarjan(v);
  34. Low[u] = min(Low[u], Low[v]);
  35. }
  36. else if(vis[v]) Low[u] = min(Low[u], Dfn[v]);
  37. }
  38. if(Dfn[u] == Low[u]){
  39. Bel_tim ++;
  40. Belong[u] = Bel_tim;
  41. vis[u] = ;
  42. while(Stack[Top] != u){
  43. Belong[Stack[Top]] = Bel_tim;
  44. vis[Stack[Top]] = ;
  45. Top --;
  46. } Top --;
  47. }
  48. }
  49.  
  50. void Build_G(){
  51. for(int u = ; u <= n; u ++){
  52. for(int i = head[u]; ~ i; i = G[i].nxt){
  53. int v = G[i].v;
  54. if(Belong[u] != Belong[v]){
  55. Out[Belong[u]] ++; In[Belong[v]] ++;
  56. }
  57. }
  58. }
  59. }
  60.  
  61. int main()
  62. {
  63. n = read();
  64. for(int i = ; i <= n; i ++) head[i] = -;
  65. for(int i = ; i <= n; i ++){
  66. int v = read();
  67. while(v) {
  68. add(i, v);
  69. v = read();
  70. }
  71. }
  72. for(int i = ; i <= n; i ++) if(!Dfn[i]) Tarjan(i);
  73. Build_G();
  74. int Out_js(), In_js();
  75. for(int i = ; i <= Bel_tim; i ++){
  76. if(!Out[i]) Out_js ++;
  77. if(!In[i]) In_js ++;
  78. }
  79. if(Bel_tim == ) cout << "" << "\n" << "";
  80. else cout << In_js << "\n" << max(Out_js, In_js);
  81. return ;
  82. }

[Luogu] 校园网Network of Schools的更多相关文章

  1. 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)

    P2746 [USACO5.3]校园网Network of Schools https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络.那些学校已订立了 ...

  2. 洛谷 P2746 [USACO5.3]校园网Network of Schools 解题报告

    P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校&q ...

  3. 【洛谷P2746】[USACO5.3]校园网Network of Schools

    校园网Network of Schools 第一问:Tarjan缩点,搞出每一个连通块,入度为零的连通块是需要必须接受新软件副本的,统计数量即可 第二问:要让整个图构成一个环,显然要将入度为零点和出度 ...

  4. P2746 [USACO5.3]校园网Network of Schools(Tarjan)

    P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 ...

  5. P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools

    P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学 ...

  6. 【luogu P2746 [USACO5.3]校园网Network of Schools】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2812 注意:判断出入度是否为0的时候枚举只需到颜色的数量. 坑点:当只有一个强连通分量时,不需要再添加新边. ...

  7. luogu P2746 [USACO5.3]校园网Network of Schools

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...

  8. luogu P2746 [USACO5.3]校园网Network of Schools 题解

    前言: 火星题... 但是我调了半天,最后看了题解才明白. Wtcl 解析: 显然先缩个点. 第一问,就是问多少入度为0的点. 第二问,抽象一下就是要添加一些边,让一个DAG变成一个SCC,求最小边数 ...

  9. COGS——C 908. 校园网 || 洛谷——P 2746 [USACO5.3]校园网Network of Schools

    http://www.cogs.pro/cogs/problem/problem.php?pid=908   ||  https://www.luogu.org/problem/show?pid=27 ...

随机推荐

  1. SAS学习笔记26 方差分析

    对于多于两组(k>2)样本均数的比较,t检验不再适用,方差分析(analysis of variance, ANOVA)则是解决上述问题的重要分析方法.方差分析由R.A.Fisher(1923) ...

  2. java中的自动装箱和拆箱

    一.什么是自动装箱和拆箱: 我们知道java为8种基本类型分别提供了对应的包装类型,在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i=new I ...

  3. Unity性能优化-对象池

    1.对象池Object Pool的原理: 有些GameObject是在游戏中需要频繁生成并销毁的(比如射击游戏中的子弹),以前的常规做法是:Instantiate不断生成预设件Prefab,然后采用碰 ...

  4. LeetCode 754. Reach a Number

    754. Reach a Number(到达终点数字) 链接:https://leetcode-cn.com/problems/reach-a-number/ 题目: 在一根无限长的数轴上,你站在0的 ...

  5. 作业16:java枚举类的秘密

    JAVA代码 public enum EnumTest { HELLO,WORLD } 字节码 public final class EnumTest extends java.lang.Enum&l ...

  6. CSS过渡效果transition和动画

    一.过渡效果 可以在不适用Flash和js 的情况下实现过渡效果 属性 描述 transition 简写属性,用于在一个属性中设置四个过渡属性 transition-property 规定应用过渡的c ...

  7. mysql打印用户权限的小技巧

    mysql5.5 5.6 SHOW GRANTS FOR mysql> SELECT DISTINCT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host ...

  8. Sliverlight/WPF 样式使用方法

    1,UserControl 页面级样式: UserControl.Resources style setter Property value. TargetType为应用的类型 <UserCon ...

  9. coding++ :MySQL函数——FIND_IN_SET()

    语法:FIND_IN_SET(str,strlist) 定义: 1). 假如字符串 str 在由N子链组成的字符串列表 strlist 中,则返回值的范围在1到N之间. 2). 一个字符串列表就是一个 ...

  10. linux 基础11-例行性命令

    1. 什么是例行性命令 1.1 linux工作排程的种类: linux例行性命令主要有两种: at:仅执行一次就从linux的任务中取消 cron:将持续例行性的工作下去 1.2 系统常见的例行性命令 ...