校园网络(nyist 120)

解题思路请看代码块中的注释~


import java.util.Scanner;
import java.util.Stack;
import java.util.Vector;/**考点:强连通分量* 考查算法:Tarjan算法* 解析:* 本题需要求给定的有向图中有多少个强连通分量,* 然后将强连通分量缩点,* 最后求缩点后的有向无环图中,* 需要添加多少条边,* 可以再次生成一个强连通图* 添加的边数为缩点后的有向无环图的出度为0的点的个数与入度为0的点的个数的最大值* 即 MAX(zeroOutNumber,zeroInNumber)* 当缩点后只有一个点时,需要特判一下,即输出结果就是0,不需要添加边*/
public class NYIST120强连通分量 {static Vector<Integer>[]vectors;static int[]dfn,low,vis,components;static int num, componentNumber;static Stack<Integer>stack;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int T = scanner.nextInt();while (T-->0){int n = scanner.nextInt();vectors = new Vector[n+1];componentNumber = 0;for (int  i = 1; i <= n; i++){vectors[i] = new Vector<Integer>();int x = scanner.nextInt();while (x != 0){vectors[i].add(x);x = scanner.nextInt();}}stack = new Stack<Integer>();dfn = new int[n+1];low = new int[n+1];vis = new int[n+1];components = new int[n+1];num = 0;for (int i = 1; i <= n; i++){if (dfn[i]==0){Tarjan(i);}}if (componentNumber == 1){System.out.printf("0\n");continue;}int []out = new int[componentNumber+1];int []in = new int[componentNumber+1];for (int i = 1;  i<= n; i++){for (Integer v: vectors[i]){if (components[i] != components[v]){out[components[i]]++;in[components[v]]++;}}}int zeroOutNumber = 0, zeroInNumber = 0;for (int  i = 1; i <= componentNumber; i++){if (out[i] == 0)zeroOutNumber ++;if (out[i] == 0)zeroInNumber ++;}System.out.print(String.format("%d\n",Math.max(zeroOutNumber, zeroInNumber)));}}private static void Tarjan(int u) {dfn[u] = low[u] = ++num;stack.add(u);vis[u] = 1;for (int i = 0; i < vectors[u].size(); i++){int v = vectors[u].get(i);if (dfn[v] == 0){Tarjan(v);low[u] = Math.min(low[u],low[v]);}else if (vis[v] == 1){low[u] = Math.min(low[u], dfn[v]);}}if (low[u] == dfn[u]){int temp;componentNumber++;do {temp = stack.pop();vis[temp] = 0;components[temp] = componentNumber;}while (temp != u);}}
}

nyist120 校园网络 (Tarjan算法 / 强连通分量)相关推荐

  1. `Computer-Algorithm` Tarjan算法,强连通分量SCC,PBCC割点,EBCC割边/桥

    Contents EBCC 例题 PBCC 涉及割点/PBCC时的解决思路 例题 SCC 过去分析 例题 EBCC Some properties of the algorithm: + for a ...

  2. Tarjan有向图强连通分量

    Tarjan有向图强连通分量 本文仅供娱乐,不喜勿喷 一.强连通分量 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi ...

  3. hdu 1269 tarjan求强连通分量

    tarjan求强连通分量的裸题复习,可当做模板. 1 #include <stack> 2 #include <cstdio> 3 #include <cstring&g ...

  4. The King’s Problem(tarjan求强连通分量缩点+匈牙利求有向无环图的最小路径覆盖)

    Link:http://acm.hdu.edu.cn/showproblem.php?pid=3861 The King's Problem Time Limit: 2000/1000 MS (Jav ...

  5. 洛谷 P2921 在农场万圣节Trick or Treat on the Farm (tarjan求强连通分量)

    洛谷 P2921 在农场万圣节Trick or Treat on the Farm (tarjan求强连通分量) 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N&l ...

  6. P1262 间谍网络 (Tarjan 求强连通分量)

    题目传送门:https://www.luogu.com.cn/problem/P1262 题意 题意转换成图的角度理解,给出初始可以访问的节点 D i D_i Di​ 以及访问这些节点需要的代价 W ...

  7. tarjan求强连通分量的思考

    我是按照这里的思路来的.这个博文只是感性理解. 递归树 关于递归树,这篇博文讲的很好,我只是给自己总结一下. 定义vis数组,在dfs连通图时赋予它们不同的含义: vis=0,表示这个点没有被访问. ...

  8. hdu 1269(Tarjan求强连通分量)

    这道题目就是求强连通分量... 这里采用的是Tarjan算法:http://m.blog.csdn.net/blog/qq574857122/16361033 AC代码: #include<io ...

  9. HDU-1269 Tarjan求强连通分量,模板题

    HDU 1269 题意:n个点m条单向边,问任意两个点是否连通. 总结:参考大神博客码的,有些地方还是不太明白. 而且这题还可以双向dfs做,有时间再做一下. // HDU-1269 #include ...

最新文章

  1. 计算机电缆线对成缆系数,计算机电缆绞合系数 - 无图版
  2. MIT给人工智能“泼冷水”:AI创造性目前有限
  3. Nginx虚拟机主机根据不同的域名使用不同的root路径
  4. .Net 2.0 新功能:迭代器(Iterators)
  5. 动态调用WCF不添加服务(svcutil.exe)
  6. ERROR 1436 (HY000) at line 1943
  7. 购买台式计算机方案,购买电脑的注意事项有哪些?
  8. java编译_解析 Java 即时编译器原理。
  9. 用几个最简单的例子带你入门 Python 爬虫
  10. vue-cli入门之项目结构分析
  11. OpenCV-Android平台应用实战 - 银行卡卡号识别(01、环境搭建)
  12. 网络拓扑图自动生成_SAP ABAP关键字语法图和ABAP代码自动生成工具Code Composer
  13. 拓嘉启远:拼多多店铺子账号设置,提高店铺效率
  14. 全微分的充分条件和必要条件
  15. 安装office2010失败,提示因为安装了office2010早期试用版本或在安装过程中出错
  16. 尚硅谷javaWeb书城项目第一阶段 用js实现
  17. kubernetes笔记
  18. Android图片处理(Matrix,ColorMatrix,深入讲解Android
  19. Python+os+openpyxl 批量获取Excel的文件名和最大行数
  20. 防火墙、DCD与TCP Keep alive

热门文章

  1. 韩国利用三星区块链技术打击海关诈骗
  2. 轻触开源(二)-Gson项目源码解析_壹
  3. 浅谈国产智能手机的自主创新
  4. 坚持是一种孤独,开发就是这么坑!
  5. 马上消费金融基于 KubeSphere 的 AI 平台开发实践
  6. python获取图像的长和宽_tensorflow之读取jpg图像长和宽实例
  7. 1.已知长方形的长和宽,求长方形的周长和面积。
  8. 求n的阶乘的算法框图_算法——递归问题
  9. 一步一步教你VMWare安装苹果Mac OS X
  10. 字节编程题 毕业旅行问题