TZOJ 2546 Electricity(去掉割点后形成的最大连通图数)
描述
Blackouts and Dark Nights (also known as ACM++) is a company that provides electricity. The company owns several power plants, each of them supplying a small area that surrounds it. This organization brings a lot of problems - it often happens that there is not enough power in one area, while there is a large surplus in the rest of the country.
ACM++
has therefore decided to connect the networks of some of the plants
together. At least in the first stage, there is no need to connect all
plants to a single network, but on the other hand it may pay up to
create redundant connections on critical places - i.e. the network may
contain cycles. Various plans for the connections were proposed, and the
complicated phase of evaluation of them has begun.
One of the
criteria that has to be taken into account is the reliability of the
created network. To evaluate it, we assume that the worst event that can
happen is a malfunction in one of the joining points at the power
plants, which might cause the network to split into several parts. While
each of these parts could still work, each of them would have to cope
with the problems, so it is essential to minimize the number of parts
into which the network will split due to removal of one of the joining
points.
Your task is to write a software that would help
evaluating this risk. Your program is given a description of the
network, and it should determine the maximum number of non-connected
parts from that the network may consist after removal of one of the
joining points (not counting the removed joining point itself).
输入
The input consists of several instances.
The
first line of each instance contains two integers 1 <= P <= 10
000 and C >= 0 separated by a single space. P is the number of power
plants. The power plants have assigned integers between 0 and P - 1. C
is the number of connections. The following C lines of the instance
describe the connections. Each of the lines contains two integers 0
<= p1, p2 < P separated by a single space, meaning that plants
with numbers p1 and p2 are connected. Each connection is described
exactly once and there is at most one connection between every two
plants.
The instances follow each other immediately, without any separator. The input is terminated by a line containing two zeros.
输出
The
output consists of several lines. The i-th line of the output
corresponds to the i-th input instance. Each line of the output consists
of a single integer C. C is the maximum number of the connected parts
of the network that can be obtained by removing one of the joining
points at power plants in the instance.
样例输入
3 3
0 1
0 2
2 1
4 2
0 1
2 3
3 1
1 0
0 0
样例输出
1
2
2
题意
有N个点编号0-N-1,让你去掉一个点,最多剩下的连通图数
题解
去掉一个点使得连通数尽可能多,可以想到去掉的是割点
如果low[v]>=low[u] cut[u]=true说明u是割点
如果改成cut[u]++,说明去掉u点会多形成cut[u]个连通图
如果u是根节点
1.cut[u]=0 说明u为孤立点 则去掉后连通数少1
2.cut[u]=1 说明u只有一个儿子 则去掉后连通数不变
3.cut[u]>=2 说明u有>=2个儿子 则去掉后连通数多cut[u]-1
代码
#include<bits/stdc++.h>
using namespace std; const int maxn=1e4+; vector< vector<int> >G(maxn);
int dfn[maxn],low[maxn],cut[maxn];
int n,m,ans,tot; void tarjan(int u,int fa)
{
dfn[u]=low[u]=++tot;
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(v==fa)continue;
if(!dfn[v])
{
tarjan(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u])cut[u]++;
}
low[u]=min(low[u],dfn[v]);
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF,n||m)
{
ans=tot=;
for(int i=;i<n;i++)low[i]=dfn[i]=cut[i]=,G[i].clear();
for(int i=,u,v;i<m;i++)
{
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
for(int i=;i<n;i++)
{
if(!dfn[i])
{
ans++;
tarjan(i,-);
cut[i]--;
}
}
printf("%d\n",ans+*max_element(cut,cut+n));
}
return ;
}
TZOJ 2546 Electricity(去掉割点后形成的最大连通图数)的更多相关文章
- 【UVA10765】Doves and bombs (BCC求割点后联通块数量)
题目: 题意: 给了一个联通无向图,现在问去掉某个点,会让图变成几个联通块? 输出的按分出的从多到小,若相等,输出标号从小到大.输出M个. 分析: BCC求割点后联通块数量,Tarjan算法. 联通块 ...
- hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。
题意:求一个无向图的,去掉两个不同的点后最多有几个连通分量. 思路:枚举每个点,假设去掉该点,然后对图求割点后连通分量数,更新最大的即可.算法相对简单,但是注意几个细节: 1:原图可能不连通. 2:有 ...
- 黄聪:Dsicuz x2.5、X3、X3.2如何去掉域名后面的/forum.php
Dsicuz x2.5去掉域名后面的/forum.php 1, 后台--全局--域名设置--应用域名--设置默认域名为访问域名就可以,如:www.xxxxx.com 上面2种方法都可以去掉域名后面的/ ...
- PHP去掉转义后字符串中的反斜杠\函数stripslashes
addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段 json数据到PHP端的时候可能会遇到json字符串中 ...
- (转载)PHP去掉转义后字符串中的反斜杠\函数stripslashes
(转载)http://www.beijibear.com/index.php?aid=182 addslashes()函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes()则是 ...
- 黄聪:PHP去掉转义后字符串中的反斜杠\函数stripslashes
addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段json数据到PHP端的时候可能会遇到json字符串中有 ...
- 利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
国外的文献汇总: <Network Traffic Classification via Neural Networks>使用的是全连接网络,传统机器学习特征工程的技术.top10特征如下 ...
- MySQL 分组后,统计记录条数
分组后,统计记录条数: SELECT num,count(*) AS counts from test_a GROUP BY num; 查询结果如下: 对num去重后的数量的统计: SELECT co ...
- mysql中左连接后,最终的记录数大于左边表的记录分析
如果B表符合条件的记录数大于1条,就会出现1:n的情况,这样left join后的结果,记录数会多于A表的记录数. 例如:member与member_login_log表的结构如下,member记录会 ...
随机推荐
- VS2015 编译前/后拷贝文件到指定目录
项目属性 —> Build Events —>Pre-build / Post-build event command line 中: Copy 源路径 目标路径(将路径用 " ...
- greenplum
参考文章:在linux系统上安装Greenplum数据库 https://blog.csdn.net/mingli_a/article/details/78779189 Greenplum安装步骤 ...
- Oracle 学习总结 - 物理结构
参考了很多文章,学习自网络 数据库 = 实例(数据库启动时初始的进程和内存结构,进程会作用到对应的内存区域-数据写入器到写入内存缓冲区,日志写入器到日志缓冲区等) + 数据库(物理文件-控制文件,数据 ...
- spark Kryo serialization failed: Buffer overflow 错误
今天在写spark任务的时候遇到这么一个错误,我的spark版本是1.5.1. Exception in thread "main" com.esotericsoftware.kr ...
- oracle第四天笔记
游标 /* 序列: ORACLE使用来模拟ID自动增长的 */ create sequence seq_test4; create table test2( tid number primary ke ...
- Android中查看SQLite中字段数据的两种方式
方式一:ADB Pull 通过adb pull导出*.db文件到PC的文件夹中,通过可视化工具 SQLiteExpertPers 进行查看.编辑: adb pull /data/data/com.jo ...
- 设置DNS 代理
最近烦心事好多啊,坑爹的中介... 公司之前因为断电,导致DNS基础服务故障,很多系统好半天在能使用,所以这次吸取教训,设置备份的DNS server以及使得DNS能够动态迁移,在这种时候就显得格外的 ...
- BlurZoomGallery一个完美下拉进入大图模式
BlurZoomGallery一个完美的Gallery和view的事件处理,下拉放大的时候gallery不断的在添加高度,gallery效果在放大,实现下拉进入大图模式,view滑动事件和galler ...
- idea 新写的jsp没有找到
- JAVA第五周 动手动脑
public class Example { int x = 3;//类的实例变量,初始化值为3 static int y = 4;//类的静态变量,初始化值为4 public static void ...