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记录会 ...
随机推荐
- day16-小数据池
一,什么是代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命 ...
- mysqldump: Got error: 1066: Not unique table/alias
mysqldump: Got error: 1066: Not unique table/alias myql 导出时提示如下: [root@localhost mysql]# mysqldump ...
- centos服务器如何用命令查看哪个程序内存占用情况,硬盘空间占用
1.free -m只能查看内存总量情况 2.top M ( 注意M是大写) 3.ps aux|head -1; ps aux | sort -k4nr | head -10 ------------- ...
- Java中,&&与&,||与|的区别
在java的逻辑运算符中,有这么四类:&&(短路与),&,|,||(短路或). &&和&都是表示与,区别是&&只要第一个条件不满足,后面 ...
- C++复习:STL之算法
算法 1算法基础 1.1算法概述 算法部分主要由头文件<algorithm>,<numeric>和<functional>组成. <algorithm> ...
- listview点击checkbox,修改值
1.初始化控件 listView1.Items.Clear(); listView1.Columns.Clear(); ColumnHeader ch = ...
- tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数(转)
tensorflow数据读取机制 tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算. 具体来说就是使用一个线程源源不断的将硬盘中的图片数 ...
- 税控服务器 TC5002UpdatePackage 安装更新
Linux版税控服务器单税号版本税控应用: TC5002UpdatePackage2008160711.zip 单税号服务器(型号:TCG-01S1) Linux版税控服务器20个 ...
- vue router 跳转到新的窗口方法
在CreateSendView2.vue 组件中的方法定义点击事件,vue router 跳转新的窗口通过采用如下的方法可以实现传递参数跳转相应的页面goEditor: function (index ...
- phpexcel 导入超过26列时的解决方案
$highestColumn = $sheet->getHighestColumn(); // 取得总列数 ++$highestColumn; for ($row = 5; $row <= ...