hdu 1269 迷宫城堡(Targin算法)
---恢复内容开始---
迷宫城堡
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Swwubmission(s): 10884 Accepted Submission(s): 4878
import java.util.Scanner;
import java.util.Stack; public class Targin {
static class Edge{ //邻接表
int v;
int next;
//int weight; 这里不需要
}
static int[] first;// first[]头结点数组
static int tot;
static int n,m; //节点数,边数
static Edge[] edge; //边
static Stack<Integer> S;
static boolean[] inStack;
static int []DFN; //DFN[]为深搜次序数组(标记时间)
static int []low; //Low[u]为u结点或者u的子树结点所能追溯到的最早栈中结点的次序号
static int Count,cnt; //Count记录强连通分量
static int []Belong;//Belong[]为每个结点所对应的强连通分量标号数组
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
n = sc.nextInt();
m = sc.nextInt(); if(n==0&&m==0) break;
init();
int u,v;
for(int i=0;i<m;i++){
u = sc.nextInt();
v= sc.nextInt();
addEdge(u,v);
}
printGraph();
int cnt=0;
for(int i=1;i<=n;i++){
if(DFN[i]==0){
Targin(i);
}
}
//System.out.println(Count);
if(Count>1) System.out.println("No");
else System.out.println("Yes");
}
}
private static void printGraph() {
for(int i=1;i<=n;i++){
System.out.print(i);
for(int e = first[i];e!=-1;e=edge[e].next){
System.out.print("->");
System.out.print(edge[e].v);
}
System.out.println();
} }
private static void Targin(int u) {
DFN[u] = low[u] = ++cnt;
inStack[u] = true;
S.add(u);
//枚举边
for(int e = first[u];e!=-1;e=edge[e].next){
int v = edge[e].v;
if(DFN[v]==0){ //j没被访问过
Targin(v);
// 更新结点u所能到达的最小次数层
if(low[u]>low[v]) low[u]=low[v]; }else if(inStack[v]&&low[u]>DFN[v]){//如果v结点在栈内
low[u] = DFN[v];
}
}
if(DFN[u]==low[u]){
//如果节点u是强连通分量的根
Count++;
int v;
do{
v = S.pop();
Belong[v] = Count;
inStack[v] = false;
}while(u!=v);
}
}
private static void init() {
tot = 0;
Count = 0;
cnt =0;
S = new Stack<Integer>(); edge = new Edge[m+1];
first = new int [n+1];
for(int i=1;i<=n;i++){
first[i] = -1;
}
Belong = new int [n+1];
DFN = new int [n+1];
low = new int[n+1];
inStack = new boolean[n+1];
}
private static void addEdge(int u, int v) { //构建邻接表
edge[tot] = new Edge();
edge[tot].v = v;
edge[tot].next = first[u];
first[u] = tot++;
}
}
---恢复内容结束---
hdu 1269 迷宫城堡(Targin算法)的更多相关文章
- HDU 1269 迷宫城堡 tarjan算法求强连通分量
基础模板题,应用tarjan算法求有向图的强连通分量,tarjan在此处的实现方法为:使用栈储存已经访问过的点,当访问的点离开dfs的时候,判断这个点的low值是否等于它的出生日期dfn值,如果相等, ...
- HDU 1269 迷宫城堡(强连通)
HDU 1269 迷宫城堡 pid=1269" target="_blank" style="">题目链接 题意:中文题 思路:强连通模板题 代 ...
- hdu 1269 迷宫城堡
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个 ...
- HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1269 迷宫城堡 最简单的联通图题 kosaraju缩点算法
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Des ...
- hdu 1269 迷宫城堡 强连通分量
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1269 迷宫城堡 (Kosaraju)
题目链接:HDU 1269 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000), ...
- HDU 1269 迷宫城堡(向量)(Tarjan模版题)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1269.迷宫城堡-Tarjan or 双向DFS
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
随机推荐
- ContestHunter暑假欢乐赛 SRM 06
T1二分check...为什么这么显然的我没看出来TAT,还在想倒着加入并查集check什么的,题写太多思维定势啦QAQ T2是NOIP题的弱化版...当时没看出来,写了个DP.可以看出这一位比上一位 ...
- YBT 5.3 数位动态规划
记忆化搜索的专题 题解在代码中 Amount of Degrees[loj 10163] /* 此题可以转换成将10进制转成b进制后有k个1其他都为0的个数 所以用记忆化dfs dp[pos][sum ...
- iOS中产生随机数的方法
利用arc4random_uniform()产生随机数 Objective-C 中有个arc4random()函数用来生成随机数且不需要种子,但是这个函数生成的随机数范围比较大,需要用取模的算法对随机 ...
- 洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
P3065 [USACO12DEC]第一!First! 题目链接:https://www.luogu.org/problemnew/show/P3065 题目描述 Bessie一直在研究字符串.她发现 ...
- [Android篇]Android Studio + Genymotion 一夜无眠 ,超级详细版本[请使用新版2.0]
环境说明:这里很重要,因为我在windows10中吃过很多的亏 操作系统: windows 7 64位系统 JDK 64位 : jdk1.7.0_75 注意我这里吃过亏!都用64位的! Android ...
- shell脚本实现轮询查看进程是否结束
功能需求: 一个shell脚本,为了使用多进程,启动十几个后台运行的程序,为了防止脚本比后台进程提前结束造成不可预估的影响,现要判断是否多个后台执行的已知进程已经结束,并在所有进程结束后做出相应操作. ...
- lombok 配置使用以及优势
maven依赖 <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> ...
- UVA 1635 Irrelevant Elements
https://vjudge.net/problem/UVA-1635 题意:n个数,每相邻两个求和,最后变成1个数,问这个数除m的余数与第几个数无关 n个数使用次数分别为C(n-1,i) i∈[0, ...
- HDU 2154 跳舞毯 | DP | 递推 | 规律
Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥. 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是 ...
- linux时区修定转
https://blog.csdn.net/feng12345zi/article/details/80348501