题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4587

题意是拿掉两个点

求最多可以把整个图分成几个联通块

注意到有一个模板是可以通过找割点来快速求出

“删一个点最多可以把整个图分成几个联通块”

所以这个时候要观察到点数只有5000

要大胆暴力枚举另一个点

先枚举一个点,然后另一个点套用tarjan模板

即可求出答案

#include <cstring>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <set>using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> P;const int maxn = 5010;
const int maxm = 10010;struct Edge
{int to, next;bool cut;
}edge[maxm];
int head[maxn], tot;
int Low[maxn], DFN[maxn], Stack[maxn];
int Index, top;
bool Instack[maxn];
bool cut[maxn];
int add_block[maxn];
int bridge;
bool flag[maxn];void addedge(int u, int v)
{edge[tot].to = v;edge[tot].next = head[u];edge[tot].cut = false;head[u] = tot++;
}void Tarjan(int u, int pre)
{int v;Low[u] = DFN[u] = ++Index;Stack[top++] = u;Instack[u] = true;int son = 0;for(int i = head[u]; i != -1; i = edge[i].next){v = edge[i].to;if(v == pre || flag[v] == true)continue;if(!DFN[v]){son++;Tarjan(v, u);if(Low[u] > Low[v])Low[u] = Low[v];if(Low[v] > DFN[u]){bridge++;edge[i].cut = true;edge[i^1].cut = true;}if(u != pre && Low[v] >= DFN[u]){cut[u] = true;add_block[u]++;}}else if(Low[u] > DFN[v])Low[u] = DFN[v];}if(u == pre & son > 1)cut[u] = true;if(u == pre)add_block[u] = son - 1;Instack[u] = false;top--;
}void solve(int N)
{int ans = 0;for(int k = 1; k <= N; k++){flag[k] = true;memset(DFN, 0, sizeof(DFN));memset(Instack, 0, sizeof(Instack));memset(add_block, 0, sizeof(add_block));memset(cut, false, sizeof(cut));for(int i = 0; i < tot; i++)edge[i].cut = false;Index = top = 0;int cnt = 0;for(int i = 1; i <= N; i++){if(flag[i])continue;if(!DFN[i]){Tarjan(i, i);cnt++;}}int anss = 0;for(int i = 1; i <= N; i++)if(flag[i] == false)anss = max(anss, cnt + add_block[i]);// if(N-1 == cnt)// ans--;
ans = max(ans, anss);flag[k] = false;}printf("%d\n", ans);
}void init()
{tot = 0;memset(head, -1, sizeof(head));
}int main()
{//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);int n, m;while(scanf("%d%d", &n, &m) == 2){init();for(int i = 0; i < m; i++){int u, v;scanf("%d%d", &u, &v);u++;v++;addedge(u, v);addedge(v, u);}solve(n);}return 0;
}

转载于:https://www.cnblogs.com/dishu/p/4529673.html

hdu 4587 TWO NODES 暴力枚举+tarjan相关推荐

  1. HDU 4587 TWO NODES(割两个点的最大连通分支数)

    http://acm.hdu.edu.cn/showproblem.php?pid=4587 题意: 给一图,求割去两个点后所能形成的最大连通分支数. 思路: 对于这种情况,第一个只能枚举,然后在删除 ...

  2. hdu 4587 TWO NODES(强连通分量)

    强连通分量的应用,枚举每两个点(枚举第二个点可以在递归中完成) #include <cstdio> #include <iostream> #include <vecto ...

  3. POJ 3174 暴力枚举

    思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1.y1.x2.y2为他们两两的差 //By SiriusRen #include <cstdio> using nam ...

  4. codeforces数学1600day6[CodeForces - 1029C多区间交+枚举,CodeForces 992C[数学公式推导],CodeForces 992B[质因数分解+暴力枚举]]

    A - Maximal Intersection CodeForces - 1029C 题目大意:就是给你n个区间,这n个区间有公共的区间长度为x,现在叫你从这n个区间中删掉一个使得x最大化. 解题思 ...

  5. 最大字段和 冲出暴力枚举

    这篇解题报告是对我最近一些题的总结,里面的代码都是我解题,优化,再优化的过程的记录,记录了自己对算法的完善与优化思路,还有对编程哲学的理解:do it,do it well. 很感谢孙老师您,让自己可 ...

  6. 一道暴力枚举题Win32版本示例

    来看一个问题:该问题的解法是 暴力枚举:这大概是ACM方面的:名称叫火柴棒等式: 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数( ...

  7. C. Divisibility by Eight【暴力枚举】

    暴力枚举即可.枚举1位这种情况,枚举2位这种情况,枚举3位这种情况. 3位满足足以,其他的4位,5位...都包含1000必定满足. #include<bits/stdc++.h> usin ...

  8. YBTOJ:灯光控制(贪心)(公倍数)(暴力枚举)

    文章目录 题目描述 解析 代码 题目描述 解析 没有想出来 首先可以确定开关要么开一次,要么不动,其他都和这俩是等价的 一开始最先想到的就是贪心的方法,每个开关遍历,如果按下会使答案变好就按下. 但是 ...

  9. array专题2---理解暴力枚举与动态规划

    746 Min Cost Climbing Stairs 一直以后对暴力枚举(又称:深度优先搜索)和动态规划不太理解,不能明白个中区别,更别说贪心.今天做这道题目的时候有点心得. 思路一:看到题目,直 ...

最新文章

  1. 简单的字幕效果html,7种HTML5 Figure图片字幕标题特效
  2. SPOJ 27020 GST Calculator
  3. 一个简单的语言的语法(二):ANTLR的重写规则
  4. CodeForces 845C Two TVs
  5. Javascript中“==”与“===”的区别
  6. 核桃编程:前端可观测性建设之路
  7. highroller赌城java下载,非常有用的链接
  8. python写字板_pywinauto简单操作写字板的例子
  9. .NET/C# 使用Stopwatch测量运行时间
  10. 给 layui upload 带每个文件的进度条, .net 后台代码
  11. 青龙羊毛---小龙传奇
  12. 经营三类医疗器械不使用计算机,第三十条经营第三类医疗器械的企业,应当具有符合医疗器械经营质量管理要求的计算机信息管理系统,保证经营的产品可追溯。计算机信息管理系统应当具有以下功能:...
  13. 【hihocoder 1477】闰秒
  14. JAVA导出EXCEL实现
  15. gpib-usb-hs linux,美国NI GPIB-USB-HS+连接线GPIB转USB接口控制器高速传输
  16. 《极光征文》颁奖 | 恭喜你完成 2019 第一个小目标
  17. k8s 集群部署(dashboard+metrics-server)
  18. 基于PyQt5的简易计算器
  19. 天使跟我走,世界我都有
  20. ps 修改透明图片上的文字,修改图片大小,导出PNG

热门文章

  1. Google实用搜索秘技六则
  2. html导入错误 wordpress,纯代码为WordPress压缩前端html代码 附BUG修复
  3. android js变量定义数组长度,js 声明数组和向数组中添加对象变量的简单实例
  4. 论文阅读:DENSELY CONNECTED CONVOLUTIONAL NETWORKS
  5. 【正一专栏】评深圳西乡砍人案——不要无辜的底层伤害
  6. ext2和ext3文件系统知识
  7. nacos 配置_阿里巴巴 Nacos 分布式配置中心原理
  8. JVM的XX参数之布尔类型 || KV设值类型
  9. Eureka 服务注册与发现01——单机版
  10. 网络爬虫介绍||为什么学网络爬虫