POJ——T2117 Electricity
http://poj.org/problem?id=2117
| Time Limit: 5000MS | Memory Limit: 65536K | |
| Total Submissions: 5459 | Accepted: 1788 |


当m==0 时,特判输出 n-1~~~
先求出原始的连通分量,
然后只有删割点才会增加连通分量,枚举每个割点
最后加上原始的
#include <algorithm>
#include <cstring>
#include <cstdio> using namespace std; const int N();
int n,m,u,v;
int sumedge,head[N<<];
struct Edge
{
int to,next;
Edge(int to=,int next=) :
to(to),next(next) {}
}edge[N*]; void ins(int from,int to)
{
edge[++sumedge]=Edge(to,head[from]);
head[from]=sumedge;
} int low[N<<],dfn[N<<],tim;
int sumcol,num[N];
int cutpoint[N]; void DFS(int now,int pre)
{
low[now]=dfn[now]=++tim;
int sumtredge=,if_cutpoint=;
for(int i=head[now];i!=-;i=edge[i].next)
{
int go=edge[i].to;
if((i^)!=pre)
{
if(!dfn[go])
{
sumtredge++;
DFS(go,i);
if(low[go]>=dfn[now])
{
if_cutpoint=;
num[now]++;
} low[now]=min(low[now],low[go]);
}
else low[now]=min(low[now],dfn[go]);
}
}
if(pre==-)
{
if(sumtredge>) cutpoint[now]=;
}
else if(if_cutpoint) cutpoint[now]=;
} int ans,cnt,tmp,vis[N],root[N],cut[N]; void link(int x)
{
vis[x]=;
for(int i=head[x];i!=-;i=edge[i].next)
{
v=edge[i].to;
if(!vis[v]) link(v);
}
} void cut_point(int pre,int fa)
{
vis[pre]=;
for(int i=head[pre];i!=-;i=edge[i].next)
{
int go=edge[i].to;
if(!vis[go])
{
if(pre==fa) cnt++;
cut_point(go,fa);
}
}
} void init(int n)
{
sumedge=-; ans=tim=tmp=cnt=;
memset(vis,,sizeof(vis));
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
memset(num,,sizeof(num));
memset(cut,,sizeof(cut));
memset(root,,sizeof(root));
memset(head,-,sizeof(head));
memset(cutpoint,,sizeof(cutpoint));
} int main()
{
// freopen("makerout.txt","r",stdin);
// freopen("myout.txt","w",stdout); while(~scanf("%d%d",&n,&m)&&n)
{
init(n);
if(m==) printf("%d\n",n-);
else
{
for(;m;m--)
{
scanf("%d%d",&u,&v);
ins(u,v); ins(v,u);
}
for(int i=;i<n;i++)
if(!vis[i]) ++tmp,link(i);
for(int i=;i<n;i++)
if(!dfn[i]) DFS(i,-);
for(int i=;i<n;i++)
if(cutpoint[i])
{
memset(vis,,sizeof(vis));
cut_point(i,i);
ans=max(ans,cnt-);
cnt=;
}
ans+=tmp;
printf("%d\n",ans);
}
}
return ;
}
POJ——T2117 Electricity的更多相关文章
- poj 2117 Electricity【点双连通求删除点后最多的bcc数】
Electricity Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4727 Accepted: 1561 Descr ...
- POJ 2117 Electricity(割点求连通分量)
http://poj.org/problem?id=2117 题意:求删除图中任意一个顶点后的最大连通分量数. 思路: 求出每个割点对应的连通分量数,注意这道题目中图可能是不连通的. 这道题目我wa了 ...
- POJ 2117 Electricity 双联通分量 割点
http://poj.org/problem?id=2117 这个妹妹我竟然到现在才见过,我真是太菜了~~~ 求去掉一个点后图中最多有多少个连通块.(原图可以本身就有多个连通块) 首先设点i去掉后它的 ...
- POJ—— 2117 Electricity
Electricity Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5620 Accepted: 1838 Descr ...
- poj 2117 Electricity(tarjan求割点删掉之后的连通块数)
题目链接:http://poj.org/problem?id=2117 题意:求删除一个点后,图中最多有多少个连通块. 题解:就是找一下割点,根节点的割点删掉后增加son-1(son为子树个数),非根 ...
- poj 2117 Electricity
/* Tarjan求割点 */ #include<iostream> #include<cstdio> #include<cstring> #include< ...
- Electricity POJ - 2117 + SPF POJ - 1523 去除割点后求强连通分量个数问题
Electricity POJ - 2117 题目描述 Blackouts and Dark Nights (also known as ACM++) is a company that provid ...
- 【POJ】2117 Electricity
无向图求割点和连通块. /* POJ2117 */ #include <iostream> #include <vector> #include <algorithm&g ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
随机推荐
- .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
最近在项目中与别的公司对接业务,对方是Java语言,需要调用对方的WebServices,结果常规的添加web引用的方法可以传过去值,但是返回值为null 查了很多资料,没有解决方法 思考应该是.Ne ...
- BZOJ 3262 陌上花开 (三维偏序CDQ+树状数组)
题目大意: 题面传送门 三维偏序裸题 首先,把三元组关于$a_{i}$排序 然后开始$CDQ$分治,回溯后按$b_{i}$排序 现在要处理左侧对右侧的影响了,显然现在左侧三元组的$a_{i}$都小于等 ...
- zabbbix4.0升级到4.2
一.添加Zabbix存储库 1.安装存储库配置包. rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4 ...
- 一种神奇的双向循环链表C语言实现
最近在看ucore操作系统的实验指导.里面提要一个双向循环链表的数据结构,挺有意思的. 其实这个数据结构本身并不复杂.在普通链表的基础上加一个前向指针,我们就得到了双向链表,再把头尾节点连起来就是双向 ...
- java静态方法
静态方法(全局方法)不能访问this(当前对象)它和类没有关系,会有逻辑错误,当调用静态方法的时候不需要创建对象 可以直接为boolean result = MyTest.isPrime();直接访问 ...
- NoReferencedTableError: Foreign key associated with column ** with which to generate a foreign key to target column 'id'
1.使用 python flask 框架做项目时,在实体类中配置了 映射关系, message: id = db.Column(db.Integer, primary_key=True)message ...
- POSIX 线程编程(一)简介
简介 在共享内存的多处理器结构中,可以用线程来实现并行.对于UNIX系统, IEEE POSIX 1003.1c标准规定了C语言线程编程接口的标准.这份标准的实现就是POSIX threads, 或者 ...
- mysql字符集修改(ubuntu)
1.关闭mysql服务 /etc/init.d/mysql start|stop 2.在/etc/mysql/my.cnf,添加下列信息 [client] default-character-set= ...
- [Unit Testing] Configure the Angular CLI to use the Karma Mocha test reporter
Every Angular CLI generated project comes already with Karmapreinstalled as well a couple of executa ...
- Cocos2d-x 3.0多线程异步资源载入
Cocos2d-x从2.x版本号到上周刚刚才公布的Cocos2d-x 3.0 Final版,其引擎驱动核心依然是一个单线程的"死循环".一旦某一帧遇到了"大活儿" ...