HDU4738 tarjan割边|割边、割点模板
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4738
坑点:
- 处理重边
- 图可能不连通,要输出0
- 若求出的结果是0,则要输出1,因为最少要派一个人
#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
const int inf = 0x3f3f3f3f;
struct edge{
int to,cost;
};
vector<edge> g[maxn];
int num[maxn],low[maxn],index;
int res;
int mp[maxn][maxn];//处理两点之间边的条数
//tarjan
void tarjan(int cur,int father){
index++;
num[cur] = index;
low[cur] = index;
for(int i = ;i<g[cur].size();i++){
if(num[g[cur][i].to] == ){
tarjan(g[cur][i].to,cur);
low[cur] = min(low[g[cur][i].to],low[cur]);
if(low[g[cur][i].to] > num[cur] && mp[cur][g[cur][i].to] == )
res = min(res,g[cur][i].cost);
}else if(g[cur][i].to != father){
low[cur] = min(low[cur],num[g[cur][i].to]);
}
}
}
//并查集判断连通性
int f[maxn];
int getf(int x){
if(f[x] == x){
return x;
}else{
return f[x] = getf(f[x]);
}
}
int merge(int l,int r){
int a = getf(l);
int b = getf(r);
if(a != b){
f[a] = b;
}
}
// 初始化
void init(int n){
index = ;
res = inf;
memset(num,,sizeof(num));
memset(low,,sizeof(low));
memset(mp,,sizeof(mp));
for(int i = ;i<=n;i++){
g[i].clear();
f[i] = i;
}
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m) && n && m){
init(n);
int a,b,c;
while(m--){
scanf("%d%d%d",&a,&b,&c);
g[a].push_back(edge{b,c});
g[b].push_back(edge{a,c});
merge(a,b);
mp[a][b]++;
mp[b][a]++;
}
int flag = ;
for(int i = ;i<=n;i++)
if(getf(i) != getf()){
flag = ;
break;
}
if(flag){
puts("");
continue;
}
tarjan(,);
if(res == )
res++;
if(res == inf)
puts("-1");
else
printf("%d\n",res);
}
return ;
}
割边模板:
#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
const int inf = 0x3f3f3f3f;
struct edge{
int to,cost;
};
vector<edge> g[maxn];
int num[maxn],low[maxn],index;
//tarjan
void tarjan(int cur,int father){
index++;
num[cur] = index;
low[cur] = index;
for(int i = ;i<g[cur].size();i++){
if(num[g[cur][i].to] == ){
tarjan(g[cur][i].to,cur);
low[cur] = min(low[g[cur][i].to],low[cur]);
if(low[g[cur][i].to] > num[cur])
//u-v为割边
}else if(g[cur][i].to != father){
low[cur] = min(low[cur],num[g[cur][i].to]);
}
}
}
// 初始化
void init(int n){
memset(num,,sizeof(num));
memset(low,,sizeof(low));
for(int i = ;i<=n;i++){
g[i].clear();
}
}
割点模板:
const int maxn = ;
const int inf = 0x3f3f3f3f;
struct edge{
int to,cost;
};
vector<edge> g[maxn];
int num[maxn],low[maxn],index;
//tarjan
void tarjan(int cur,int father){
int child = ;
index++;
num[cur] = index;
low[cur] = index;
for(int i = ;i<g[cur].size();i++){
if(num[g[cur][i].to] == ){
child++;
tarjan(g[cur][i].to,cur);
low[cur] = min(low[g[cur][i].to],low[cur]);
if(low[g[cur][i].to] >= num[cur] && cur!=root)
//cur为割点
if(cur==root && child>=)
//cur为割点
}else if(g[cur][i].to != father){
low[cur] = min(low[cur],num[g[cur][i].to]);
}
}
}
// 初始化
void init(int n){
memset(num,,sizeof(num));
memset(low,,sizeof(low));
for(int i = ;i<=n;i++){
g[i].clear();
}
}
HDU4738 tarjan割边|割边、割点模板的更多相关文章
- Tarjan缩点割点(模板)
描述:https://www.luogu.com.cn/problem/P3387 给定一个 nn 个点 mm 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权 ...
- Tarjan无向图的割点和桥(割边)全网详解&算法笔记&通俗易懂
更好的阅读体验&惊喜&原文链接 感谢@yxc的腿部挂件 大佬,指出本文不够严谨的地方,万分感谢! Tarjan无向图的割点和桥(割边) 导言 在掌握这个算法前,咱们有几个先决条件. [ ...
- hihoCoder 1183 连通性一·割边与割点(Tarjan求割点与割边)
#1183 : 连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢 ...
- Tarjan在图论中的应用(二)——用Tarjan来求割点与割边
前言:\(Tarjan\) 求割点和割边建立在 \(Tarjan\)算法的基础之上,因此建议在看这篇博客之前先去学一学\(Tarjan\). 回顾\(Tarjan\)中各个数组的定义 首先,我们来回顾 ...
- Tarjan的学习笔记 求割边求割点
博主图论比较弱,搜了模版也不会用... 所以决心学习下tarjan算法. 割点和割边的概念不在赘述,tarjan能在线性时间复杂度内求出割边. 重要的概念:时间戟,就是一个全局变量clock记录访问结 ...
- tarjan求割边割点
tarjan求割边割点 内容及代码来自http://m.blog.csdn.net/article/details?id=51984469 割边:在连通图中,删除了连通图的某条边后,图不再连通.这样的 ...
- Tarjan算法与割点割边
目录 Tarjan算法与无向图的连通性 1:基础概念 2:Tarjan判断割点 3:Tarjan判断割边 Tarjan算法与无向图的连通性 1:基础概念 在说Tarjan算法求解无向图的连通性之前,先 ...
- hihoCoder #1183 : 连通性一·割边与割点(求割边与各点模板)
#1183 : 连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢 ...
- HihoCoder 1183 : 连通性一·割边与割点(模板)
连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢失.为了避免再次 ...
随机推荐
- vs2015 编译时错误列表中没有错误,dll却没有生成出来
最近发现vs2015的一个问题, 编译时,错误列表中没有错误,dll却没有生成出来,vs重启也无效 解决: 多次排查发现如果一个类库设置的是framework 4.0版本,但引用了framework4 ...
- [LeetCode] Palindrome Permutation II 回文全排列之二
Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empt ...
- SQL Server-5种常见的约束
引自:http://www.cnblogs.com/dekevin/p/4772235.html SQLServer 中有五种约束, Primary Key 约束. Foreign Key 约束. U ...
- 远程桌面时plsql的复制粘贴功能失效
解决办法:重新启动远程桌面上的rdpclip进程就可以复制粘贴了,但是每次重开远程桌面都会出现同样的问题.可以rdpclip这个设置成开机启动.
- Spring Boot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- Android基础测试题(四)
看了前两道题大家有没有发现,测试题少了(一),大家猜猜测试题(一)是什么? Android基础测试题(四): 需求: 建一个方法,格式化输出2016-11-14 10:15:26格式的当前时间,然后截 ...
- python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法?
python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法: 原因:因为jenkins是用windows installer 安装成 windo ...
- js修改伪类的值
css文件 p.change:after { content: attr(data-content); } js文件 $(this).addClass('change').attr('data-con ...
- POJ 1797 Heavy Transportation(最大生成树/最短路变形)
传送门 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 31882 Accept ...
- 基于Dubbo框架构建分布式服务(一)
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...