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 ...
随机推荐
- Educational Codeforces Round 6 A
A. Professor GukiZ's Robot time limit per test 0.5 seconds memory limit per test 256 megabytes input ...
- Ruby环境搭建
刚接触Ruby,发现Ruby真心强大,搞了那么久的Java了,已经被Java的繁琐的语法整的无语透顶了,尤其的Java异常,设计出来就是个失败呀!Ruby目前更新到了2.x了,社区也很活跃,开发效率和 ...
- ACM1004 Let the balloons fly
These code is for the problem "Let the balloons Fly" in ACM 1004 which need deal with stri ...
- FreeRTOS - 程序开发阶段建议
1.创建任务.定时器等都需要耗用分配给FreeRTOS的heap,由于RAM有限,分配作为FreeRTOS的heap量有限,一不小心就不够用了,所以应该有检测任务.定时器等是否创建成功,如下图: 2. ...
- 利用pdfJS实现以读取文件流方式在线展示pdf文件
第一步:下载源码https://github.com/mozilla/pdf.js 第二步:构建PDF.js 第三步:修改viewer.js var DEFAULT_URL = 'compressed ...
- 转:PriorityQueue
转自:PriorityQueue 本文github地址 Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地 分析 ...
- vijos 1069 新年趣事之红包 Prim水题
描述 xiaomengxian一进门,发现外公.外婆.叔叔.阿姨……都坐在客厅里等着他呢.经过仔细观察,xiaomengxian发现他们所有人正好组成了一个凸多边形.最重要的是,他们每个人手里都拿着一 ...
- \(\rm LightOJ 1371 - Energetic Pandas 简单计数+组合\)
http://www.lightoj.com/volume_showproblem.php?problem=1371 题意:给你n根竹子,和n只熊猫(XD),每个熊猫只能选择重量不大于它的竹子,问有几 ...
- HUST 1103 校赛 邻接表-拓扑排序
Description N students were invited to attend a party, every student has some friends, only if someo ...
- web版canvas做飞机大战游戏 总结
唠唠:两天的时间跟着做了个飞机大战的游戏,感觉做游戏挺好的.说是用html5做,发现全都是js.说js里一切皆为对象,写的最多的还是函数,都是函数调用.对这两天的代码做个总结,希望路过的大神指点一下, ...