算法笔记_188:历届试题 危险系数(Java)
目录
1 问题描述
抗日战争时期,冀中平原的地道战曾发挥重要作用。
地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。
我们来定义一个危险系数DF(x,y):
对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。
本题的任务是:已知网络结构,求两站点之间的危险系数。
输入数据第一行包含2个整数n(2 <= n <= 1000), m(0 <= m <= 2000),分别代表站点数,通道数;
接下来m行,每行两个整数 u,v (1 <= u, v <= n; u != v)代表一条通道;
最后1行,两个数u,v,代表询问两点之间的危险系数DF(u, v)。
1 3
2 3
3 4
3 5
4 5
5 6
1 6
2 解决方案

具体代码如下:
import java.util.ArrayList;
import java.util.Scanner; public class Main {
public static int n, m;
public static int count;
public static int[] DFN;
public static int[] Low;
public static int[] parent;
public static ArrayList<Integer>[] list;
public static ArrayList<Integer> point; @SuppressWarnings("unchecked")
public void init() {
count = 0;
DFN = new int[n + 1];
Low = new int[n + 1];
parent = new int[n + 1];
list = new ArrayList[n + 1];
point = new ArrayList<Integer>();
for(int i = 1;i <= n;i++)
list[i] = new ArrayList<Integer>();
} public void TarJan(int start, int father) {
DFN[start] = ++count;
Low[start] = DFN[start];
parent[start] = father;
int childern = 0;
for(int i = 0;i < list[start].size();i++) {
int j = list[start].get(i);
if(DFN[j] == 0) {
childern++;
TarJan(j, start);
Low[start] = Math.min(Low[start], Low[j]);
if(parent[start] == -1 && childern > 1) {
if(!point.contains(start))
point.add(start);
}
if(parent[start] != -1 && Low[j] >= DFN[start]) {
if(!point.contains(start))
point.add(start);
} } else if(j != parent[start]) {
Low[start] = Math.min(Low[start], DFN[j]);
}
}
} public void dfs(int a, boolean[] visited) {
visited[a] = true;
for(int i = 0;i < list[a].size();i++) {
int j = list[a].get(i);
if(visited[j] == false)
dfs(j, visited);
}
} public void getResult(int a, int b) {
TarJan(1, -1);
int result = 0;
for(int i = 0;i < point.size();i++) {
if(point.get(i) == a || point.get(i) == b)
continue;
else {
boolean[] visited = new boolean[n + 1];
visited[point.get(i)] = true;
dfs(a, visited);
if(visited[b] == false) {
result++;
}
}
}
System.out.println(result);
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
test.init();
for(int i = 1;i <= m;i++) {
int u = in.nextInt();
int v = in.nextInt();
list[u].add(v);
list[v].add(u);
}
int a = in.nextInt();
int b = in.nextInt();
test.getResult(a, b);
} }
算法笔记_188:历届试题 危险系数(Java)的更多相关文章
- 算法笔记_177:历届试题 城市建设(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修.市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他. C市中有 ...
- 算法笔记_186:历届试题 高僧斗法(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 古时丧葬活动中经常请高僧做法事.仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑的气氛. 节目大略步骤为:先用粮食(一般是稻米)在地 ...
- 算法笔记_183:历届试题 九宫重排(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...
- 算法笔记_172:历届试题 波动数列(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度 ...
- 算法笔记_196:历届试题 剪格子(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|**** ...
- 算法笔记_195:历届试题 错误票据(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为 ...
- 算法笔记_194:历届试题 翻硬币(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 小明正在玩一个“翻硬币”的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情 ...
- 算法笔记_190:历届试题 幸运数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的“筛法”生成 . 首先从1开始写出自然数1,2,3,4,5,6,.... 1 就是第 ...
- 算法笔记_187:历届试题 网络寻路(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任 ...
随机推荐
- 网络服务器搭建的那些事(PV QPS Throughput) 转载
一.前言: 从事后台sever开发的同学,代码开发完成之后,上线之前,总会进行各种黑盒白盒测试,压测.正确性测试... 而测试同学,会给开发同学一份测试报告,需要开发同学进行确认...问题来了,里面好 ...
- Vanish 详解
1.varnish 概述: varnish是一款高性能且开源的方向代理服务器和HTTP加速器,它的开发者poul-Henning kamp FreeBSD 核心的开发人员之一.varnish采 ...
- 华为S5300系列升级固件S5300SI-V100R006C00SPC800.cc
这个固件附带了web,V100R005可以直接升级到这个版本,但没什么必要,因为V100R005本身可以直接升级到V200. 升级小插曲: 1.升级的使用使用Windows,不要用Mac或者Linux ...
- Toast信息框
Toast组件的功能和对话框有些相似,可是使用上更简单,使用Toast组件的目的仅仅有一个,就是在屏幕上弹出一个消息窗体告知用户某个信息,并且这个窗体没有不论什么button,经过几秒钟后就会消失.假 ...
- Backup your Android without root or custom recovery -- adb backup
ecently discovered a neat new way to back up apps on my Android without having to use Titanium Backu ...
- ORA-00918:未明确定义列
<script type="text/javascript"><!-- google_ad_client = "pub-9528830580198364 ...
- 清理IIS Express上的网站
默认情况下,当使用Visual Studio浏览网页时,网站会被保存在IIS Express上,这些网站需要手动清理.可以通过命令行或界面进行清理. □ 通过命令行 →找到appcmd.exe在C:\ ...
- 使用Lazy<T>实现对客户订单的延迟加载
"延迟加载"是指在需要的时候再加载数据.比如获得一个Customer信息,并不会把该Customer的Orders信息一下加载出来,当需要显示Orders的时候再加载.简单来说,就 ...
- nginx简单代理配置
原文:https://my.oschina.net/wangnian/blog/791294 前言 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器, ...
- linux-修改时区时间
所有笔记基于-CentOS release 6.8 (Final) ntpdate 202.120.2.101 同步上海时间 cp -f /usr/share/zoneinfo/Asia/Shangh ...