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 ...
随机推荐
- SignalR技术
Asp.net SignalR快速入门 一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到Sign ...
- Webservice-初级实例(二)
去年这个时候在亿阳工作,经理让我做数据同步功能,用到WS,于是草草研究之后,就投入使用了.前两天同事给我讲解分配给我的项目时,讲到其中一块是数据同步功能,我不禁一笑,同事问笑什么,我说世界真是奇妙,去 ...
- client对象层次和0级DOM
刚開始学了两天JS,闲着无聊,顺手画了张图
- jsp的原则执行
什么时候server一对JSP页面运行时,第一个请求,server向上JSP引擎首先JSP页的文件翻译成Java文件.那么这Java文件编译的字节码文件..而当这个JSP页面再次被请求运行时,JSP引 ...
- hdu 4524 郑厂长系列故事——逃离迷宫 小水题
郑厂长系列故事——逃离迷宫 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- 【深入浅出jQuery】源码浅析--整体架构(转)
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- Google的Guava它Collection升华
至于Guava这是不是在这里说.一个已被提上一个非常特殊的! 这主要是为了分享Guava对于一些升华处理组.井,不多说了,直接在代码: package com.joyce.guava.bean; /* ...
- OCP-1Z0-051-名称解析-文章7称号
7. Which two statements are true regarding the USING and ON clauses in table joins? (Choose two.) A ...
- lambda Join /Group by/ Contains
1.Join Contains
- C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! !
原文:C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! ! 一般我们在开发Windows Phone 8 APP ,有时会需要超连结连到其他的网页,但 ...