HDU 3313 Key Vertex(dfs + bfs)
HDU 3313 Key Vertex
题意:一个有向无环图。求s,t之间的割点
思路:先spfa找一条最短路出来,假设不存在。就n个都是割点。
然后每次从s进行dfs,找到能经过最短路上的最远点。然后这个点就是割点。然后下次在以这个为起点dfs,不断迭代直到找到t为止
代码:
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std; const int N = 100005; int n, m, s, t, fa[N], vis[N], mark[N], d[N];
int first[N], vv[N * 3], next[N * 3], en; const int INF = 0x3f3f3f3f; void addedge(int a, int b) {
vv[en] = b;
next[en] = first[a];
first[a] = en++;
} bool bfs() {
queue<int> Q;
for (int i = 0; i < n; i++) d[i] = INF;
memset(vis, 0, sizeof(vis));
Q.push(s);
vis[s] = 1;
d[s] = 0;
while (!Q.empty()) {
int u = Q.front();
vis[u] = 0;
Q.pop();
for (int i = first[u]; i + 1; i = next[i]) {
int v = vv[i];
if (d[v] > d[u] + 1) {
d[v] = d[u] + 1;
fa[v] = u;
if (!vis[v]) {
Q.push(v);
vis[v] = 1;
}
}
}
}
if (d[t] >= INF) return false;
int tmp = t;
memset(mark, 0, sizeof(mark));
while (tmp != s) {
mark[tmp] = 1;
tmp = fa[tmp];
}
mark[s] = mark[t] = 1;
return true;
} void dfs(int u) {
for (int i = first[u]; i + 1; i = next[i]) {
int v = vv[i];
if (vis[v]) continue;
vis[v] = 1;
if (mark[v]) {
if (d[v] > d[s])
s = v;
continue;
}
dfs(v);
}
} int main() {
while (~scanf("%d%d", &n, &m)) {
memset(first, -1, sizeof(first));
en = 0;
int u, v;
while (m--) {
scanf("%d%d", &u, &v);
addedge(u, v);
}
scanf("%d%d", &s, &t);
if (!bfs()) {
printf("%d\n", n);
continue;
}
int ans = 1;
memset(vis, 0, sizeof(vis));
while (s != t) {
dfs(s);
ans++;
}
printf("%d\n", ans);
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
HDU 3313 Key Vertex(dfs + bfs)的更多相关文章
- HDU 1885 Key Task(三维BFS)
题目链接 题意 : 出口不止一个,一共有四种颜色不同的门由大写字母表示,而钥匙则是对应的小写字母,当你走到门前边的位置时,如果你已经走过相应的钥匙的位置这个门就可以走,只要获得一把钥匙就可以开所有同颜 ...
- POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...
- 第三次组队赛 (DFS&BFS)
网站:CSUST 8月1日 先总结下,不得不说死的很惨,又是第三就不说了,一共7道题,AC了5道,但是有一个组三个人是做的个人赛,有两人AK了.......Orz,然后深搜还是大问题,宽搜倒是不急了. ...
- Leetcode之深度+广度优先搜索(DFS+BFS)专题-934. 最短的桥(Shortest Bridge)
Leetcode之广度优先搜索(BFS)专题-934. 最短的桥(Shortest Bridge) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary ...
- [LeetCode]695. 岛屿的最大面积(DFS/BFS)、200. 岛屿数量(DFS/BFS待做/并差集待做)
695. 岛屿的最大面积 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被 ...
- hdu 2102 A计划(双层BFS)(具体解释)
转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...
- hdu 1716 排列2(DFS搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1716 排列2 Time Limit: 1000/1000 MS (Java/Others) Me ...
- hdu 4277 USACO ORZ(dfs+剪枝)
Problem Description Like everyone, cows enjoy variety. Their current fancy is new shapes for pasture ...
- HDU——1195Open the Lock(双向BFS)
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
随机推荐
- GlusterFS源代码解析 —— GlusterFS 简单介绍
原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564185 -- -- 本系列博客源代码是基于GlusterFS 3 ...
- poj1236 有向图加边变成强连通图
给我们一个有向图,有两个问题 1.最少要给多少个点发消息,才能使得所有的点都收到消息(消息可以随边传递) 2.最少需要多少条边才能使得图变成强连通图 对于一个强连通分量,可以当做一个点来考虑,所以我们 ...
- An Overview of Complex Event Processing
An Overview of Complex Event Processing 复杂事件处理技术概览(一) 翻译前言:我在理解复杂事件处理(CEP)方面一直有这样的困惑--为什么这种计算模式是有效的, ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- Linux date -s(转)
修改linux的时间可以使用date指令 修改日期: 时间设定成2009年5月10日的命令如下: #date -s 05/10/2009 修改时间: 将系统时间设定成上午10点18分0秒的命令如下. ...
- APUE读书笔记-第13章-守护进程
第13章 守护进程 13.1 引言 *守护进程也称精灵进程(daemon)是生存期较长的一种进程.它们常常在系统自举时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的.UNI ...
- The practice program of C on point
//字符反向排列 //vision 1.2 #include<stdio.h> void reverse_string( char *str ) { char *string;//第一个字 ...
- Android.mk参数解释
-------------------- 下面对Android.mk 中经常出现的变量进行讲解 -------------------- 这些变量,你会经常在Android.mk文件中见到,下面以字表 ...
- ASF(传感器)
版权声明:曾经的Blog文章合并.原创作品,谢绝转载.否则将追究法律责任. SensorManager类:用于创建sensor service的实例.该类提供了非常多 用于訪问和枚举传感器,注冊和注销 ...
- 一道看似简单的sql需求(转)
听说这题难住大批高手,你也来试下吧.ps:博问里的博友提出的. 原始数据 select * from t_jeff t 简单排序后数据 select * from t_jeff t order by ...