LOJ-10103(求删去割点后最多的连通分量)
题目链接:传送门
思路:
(1)这道题的图可能不连通,所以需要多次Tarjan;
(2)设置cut[i]=x数组表示第i个节点被删除后右多少个子图(这个只是在一个图中),如果是根节点就要-1,因为根节点都满足
num[v]==low[u].
(3)mx的初始值设为最小值(-9999999),因为有可能cur[i]=-1,存在根节点所在的图是双联通图。
参考文章:传送门
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = ;
int num[maxn],low[maxn],cut[maxn],tim;
vector <int> vc[maxn];
void Init()
{
memset(num,,sizeof(num));
memset(low,,sizeof(low));
memset(cut,,sizeof(cut));
for(int i=;i<maxn;i++) vc[i].clear();
tim=;
}
void Tarjan(int u,int pre)
{
int i,v;
num[u]=low[u]=++tim;
for(int i=;i<vc[u].size();i++){
v=vc[u][i];
if(!num[v]){
Tarjan(v,u);
low[u]=min(low[u],low[v]);
if(num[u]<=low[v]) cut[u]++;
}
else if(pre!=v) low[u]=min(low[u],num[v]);
}
}
int main(void)
{
int n,m,i,j,x,y;
while(~scanf("%d%d",&n,&m)&&(n+m)){
Init();
for(i=;i<m;i++){
scanf("%d%d",&x,&y);
vc[x].push_back(y);
vc[y].push_back(x);
}
int cnt=,mx=-;
for(i=;i<n;i++)
if(!num[i]){
Tarjan(i,-);
cnt++;cut[i]--;
}
for(i=;i<n;i++) mx=max(mx,cut[i]);
printf("%d\n",mx+cnt);
}
return ;
}
LOJ-10103(求删去割点后最多的连通分量)的更多相关文章
- poj2117求割点后最多的块。
tarjan算法,枚举割点(注意此题无向图可能不连通),每个割点分割后最大块数+连通分量-1即可.开始老是TLE,后来比较了他人代码,只在vector<vector<int.>.&g ...
- hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。
题意:求一个无向图的,去掉两个不同的点后最多有几个连通分量. 思路:枚举每个点,假设去掉该点,然后对图求割点后连通分量数,更新最大的即可.算法相对简单,但是注意几个细节: 1:原图可能不连通. 2:有 ...
- 【UVA10765】Doves and bombs (BCC求割点后联通块数量)
题目: 题意: 给了一个联通无向图,现在问去掉某个点,会让图变成几个联通块? 输出的按分出的从多到小,若相等,输出标号从小到大.输出M个. 分析: BCC求割点后联通块数量,Tarjan算法. 联通块 ...
- poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数
poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数 题目大意:如题目所示 给你一些关系图——连通图,想要问你有没有个节点,损坏后,可以生成几个互相独立的网络(也就是连通分量), ...
- tarjan求割边割点
tarjan求割边割点 内容及代码来自http://m.blog.csdn.net/article/details?id=51984469 割边:在连通图中,删除了连通图的某条边后,图不再连通.这样的 ...
- tarkjan求无向图割点模板
#include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; ; ; struct node { ...
- Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题
Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...
- loj 1063(求割点个数)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26780 思路:判断一个点是否是割点的两个条件:1.如果一个点v是根 ...
- poj 1523 SPF 求割点以及删除该割点后联通块的数量
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7136 Accepted: 3255 Description C ...
随机推荐
- docker 批量删除
杀死所有正在运行的容器docker kill $(docker ps -a -q) 删除所有已经停止的容器docker rm $(docker ps -a -q) 删除所有未打 dangling 标签 ...
- HTTPS如何保证数据传输的安全性 -- 结合加密
什么是HTTPS: HTTP就是我们平时浏览网页时候使用的一种协议 HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全.为了保证这些隐私数据能加密传输,于是网 ...
- vm虚拟机 模板机进行克隆导致centos 7.2 无法加载网卡
问题描述:vm虚拟机 模板机进行克隆导致centos 7.2 无法加载网卡. 1.ifconfig 查看网卡状态 lo: flags=<UP,LOOPBACK,RUNNING> mtu i ...
- 第三章 FFmpeg转封装
3.1 音视频文件转MP4格式 在互联网常见的格式中,跨平台最好的应该是MP4文件. 3.1.1 MP4格式标准介绍 MP4文件由多个Box与FullBox组成 每个Box由Header和Data两部 ...
- python初接触
浑浑噩噩的过了3年多大学生涯,就借此开始下定决心好好的学好一门技术,为心中那个游戏梦而努力. 正式开课的第一天(也算不的吧,毕竟昨天老师也和我们讲了python课程的大纲内容).自我总结下今天的内容吧 ...
- window.open() 打开的子页面 往主页面传参问题
<!--主页面的代码--><!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- C++学习基础十六-- 函数学习笔记
C++ Primer 第七章-函数学习笔记 一步一个脚印.循序渐进的学习. 一.参数传递 每次调用函数时,都会重新创建函数所有的形参,此时所传递的实参将会初始化对应的形参. 「如果形参是非引用类型,则 ...
- SQLite在Android程序中的使用方法,SQLite的增删查改方法
Sqlite: 1.一款用来实现本地数据存储的轻量级数据管理工具,是众多用来实现数据库管理的工具之一. 2.Android已经将SQLite的代码功能吸收在它的系统中,我们可以直接在Android程序 ...
- DOM+position:relative+缓冲运动
一.nodeType节点类型 nodeType==3 ->文本节点 nodeType==1 ->元素节点 for(var i=0;i<oUl.childNodes.length; ...
- MYSQL性能优化(2)
Insert语句优化 1. 多行并为一个语句 insert into table values (行1),(行2),........... 2. 使用中间内存队列, 逻辑是立马执行插入,其他数据放 ...