试题描述
求一个图删除一个点之后,联通块最多有多少。
输入
多组数据。第一行两个整数 P,C 表示点数和边数。
接下来 C 行每行两个整数 p1,p2,表示 p1 与 p2 有边连接,保证无重边。读入以 0 0 结束。
输出
输出若干行,表示每组数据的结果。
输入示例
3 3
0 1
0 2
2 1
4 2
0 1
2 3
3 1
1 0
0 0
输出示例
1
2
2

详解参考https://blog.csdn.net/u013480600/article/details/30976823。

在dfs的时候,我们用cut[i]==X表示在dfs树中当i节点被删除时,i节点的X个儿子被切割开来(可以认为cut[i]是i节点与它的儿子连接的桥边的数目)。注意:如果i是根且其儿子只有1个,虽然i不是割点,cut[i]依然=1。如果i节点非割点,那么cut[i]=0。如果i是割点,那么cut[i]就是i被删除后将割出来的儿子数目。

然后我们求出了每个点的cut[i]值,即i点被删除,会有cut[i]个儿子树被割出来。如果i是dfs树的非根节点,那么cut[i]== 切除i之后增加的连通分量数目。如果i是dfs树的根节点,那么cut[i]-1才是切除i之后增加的连通分量数目(想想是不是)。

如果原始cut[i]=0,表示i是孤立的一点,此时cut[i]-1=-1.

如果原始cut[i]=1,表示i为根且有一个儿子,此时cut[i]-1=0.

如果原始cut[i]>=2,表示i为根且分割了>=2个儿子,此时cut[i]-1>=1.

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#define MAXN 100010
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define in(a) a=read()
using namespace std;
inline int read(){
int f=,x=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m,cnt,ans;
int total=,head[MAXN],to[MAXN<<],nxt[MAXN<<];
int dfn[MAXN],low[MAXN],sum[MAXN];
inline void adl(int a,int b){
total++;
to[total]=b;
nxt[total]=head[a];
head[a]=total;
return ;
}
inline void tarjan(int u,int f){
low[u]=dfn[u]=++cnt;
for(int e=head[u];e;e=nxt[e]){
if(!dfn[to[e]]){
tarjan(to[e],u);
low[u]=min(low[to[e]],low[u]);
if(low[to[e]]>=dfn[u]) sum[u]++;
}
else if(to[e]!=f) low[u]=min(low[u],dfn[to[e]]);
}
return ;
}
int main(){
while(scanf("%d%d",&n,&m)){
if(n== && m==) return ;
int a,b;
total=cnt=ans=;
memset(head,,sizeof(head));
memset(dfn,,sizeof(head));
memset(low,,sizeof(low));
memset(sum,,sizeof(sum));
REP(i,,m){
in(a);in(b);
adl(a,b);
adl(b,a);
}
int num=;
ans=-;
REP(i,,n-)
if(!dfn[i]){
num++;
tarjan(i,-);
sum[i]--;
}
REP(i,,n-) ans=max(ans,sum[i]);
cout<<ans+num<<endl;
}
return ;
}

poj2117 Electricity的更多相关文章

  1. 无向连通图求割点(tarjan算法去掉改割点剩下的联通分量数目)

    poj2117 Electricity Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3603   Accepted: 12 ...

  2. Tarjan求割点和桥

    by szTom 前置知识 邻接表存储及遍历图 tarjan求强连通分量 割点 割点的定义 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多, ...

  3. 备战noip week8

    POJ1144 网络 description: 给出一张\(N\)个点的无向图,求其中割点的个数 data range: \(N\le 100\) solution: 一道模板题(但是读入实在是把我恶 ...

  4. poj 2117 Electricity【点双连通求删除点后最多的bcc数】

    Electricity Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4727   Accepted: 1561 Descr ...

  5. 【POJ】2117 Electricity

    无向图求割点和连通块. /* POJ2117 */ #include <iostream> #include <vector> #include <algorithm&g ...

  6. TZOJ 2546 Electricity(去掉割点后形成的最大连通图数)

    描述 Blackouts and Dark Nights (also known as ACM++) is a company that provides electricity. The compa ...

  7. electricity meter就是电表

    英式英语metre意思是度量衡里面的单位:米 美式英语拼为 meter 除了“米”,还有一个意思是“计量器”,比如 parking meter就是是路边停车投币计时器,cab meter就是出租车的计 ...

  8. POJ—— 2117 Electricity

    Electricity Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5620   Accepted: 1838 Descr ...

  9. Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题

    Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...

随机推荐

  1. 关于[神州数码信息安全DCN杯/信息安全管理与评估]的一些经验之谈

    前阵子参加了神州数码的比赛,赛后有如下经验分享,给还没参加过的朋友分享一下心德以及要注意的坑. 先科普一下这个比赛的三个阶段: 第一阶段主要是考网络部分的,例如搭建wifi以及防火墙诸如此类的设备. ...

  2. 【项目管理】git和码云的使用【转】

    转自:https://www.cnblogs.com/riverdubu/p/6491944.html 缘起 说了那么多关于git和码云相关的事,一直都没给大伙讲解这个码云究竟是个啥玩意儿. 今天就给 ...

  3. C# 获取mp3文件的歌曲时间长度

    添加命名空间:    using Shell32;    using System.Text.RegularExpressions;添加引用:COM组件的Microsoft Shell Control ...

  4. POJ - Problem 1275 - Cashier Employment

    · 对于差分约束,题目要求求什么便设什么,令$Sum[i]$表示由$0 ~ i$的雇佣人数. · 要充分利用题目所给条件,令$Have[i]$表示i时刻申报的人数,$Need[i]$表示i时刻需要的人 ...

  5. 虚拟机NAT网络设置

    1. 虚拟机设置 2. 本地网络设置 3. 本地虚拟网卡设置 4. 安装虚拟机,设置网络为NAT方式即可访问外网.

  6. Linux上java环境变量配置

    1.java配置 配置环境变量在/etc/profile下增加 # set Java environment JAVA_HOME=/usr/share/jdk1.6.0_43 PATH=$JAVA_H ...

  7. 爬虫基础库之beautifulsoup的简单使用

    beautifulsoup的简单使用 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: ''' Beautiful Soup提供一些简单的.p ...

  8. Codeigniter处理用户登录验证后URL跳转

    涉及到My_Controller.php以及登录验证模块User.php,代码如下: My_Controller.php class MY_Controller extends CI_Controll ...

  9. Maven使用第三方jar文件的两种方法<转>

    http://www.cnblogs.com/sekai/p/5932206.html 今天用上了.. ===================== 在Maven中,使用第三方库一般是通过pom.xml ...

  10. 关于HTML5 boilerplate 的一些笔记

    最近在研究HTML5 boilerplate的模版,以此为线索可以有条理地学习一些前端的best practice,好过在W3C的文档汪洋里大海捞针……啊哈哈哈…… 开头的IE探测与no-js类是什么 ...