BZOJ_2730_ [HNOI2012]矿场搭建_点双联通分量
BZOJ_2730_ [HNOI2012]矿场搭建_点双联通分量
Description
Input
输入文件有若干组数据,每组数据的第一行是一个正整数 N(N≤500),表示工地的隧道数,接下来的 N 行每行是用空格隔开的两个整数 S 和 T,表示挖 S 与挖煤点 T 由隧道直接连接。输入数据以 0 结尾。
Output
输入文件中有多少组数据,输出文件 output.txt 中就有多少行。每行对应一组输入数据的 结果。其中第 i 行以 Case i: 开始(注意大小写,Case 与 i 之间有空格,i 与:之间无空格,: 之后有空格),其后是用空格隔开的两个正整数,第一个正整数表示对于第 i 组输入数据至少需 要设置几个救援出口,第二个正整数表示对于第 i 组输入数据不同最少救援出口的设置方案总 数。输入数据保证答案小于 2^64。输出格式参照以下输入输出样例。
Sample Input
1 3
4 1
3 5
1 2
2 6
1 5
6 3
1 6
3 2
6
1 2
1 3
2 4
2 5
3 6
3 7
0
Sample Output
Case 2: 4 1
HINT
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
#define N 100050
typedef long long ll;
vector<int>V[N];
int head[N],to[N<<1],nxt[N<<1],cnt=1;
int vis[N<<1],S[N<<1],top,bl[N<<1],bcc,dfn[N],low[N],rt,tot,iscut[N],fa[N],n,m;
inline void add(int u,int v) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt;
}
void dfs(int x) {
int i,num=0;
dfn[x]=low[x]=++tot;
for(i=head[x];i;i=nxt[i]) {
if(vis[i]) continue;
vis[i]=vis[i^1]=1;
num++;
S[++top]=i;
if(!dfn[to[i]]) {
dfs(to[i]);
low[x]=min(low[x],low[to[i]]);
if(dfn[x]<=low[to[i]]) {
iscut[x]=1;
int t;
++bcc; V[bcc].clear();
do {
t=S[top--];
int u=to[t^1],v=to[t];
if(fa[u]!=bcc) fa[u]=bcc,V[bcc].push_back(u);
if(fa[v]!=bcc) fa[v]=bcc,V[bcc].push_back(v);
}while(t!=i);
}
}else {
low[x]=min(low[x],dfn[to[i]]);
}
}
if(rt==x&&num<2) iscut[x]=0;
}
int Cas;
void solve() {
n=0;
Cas++;
memset(head,0,sizeof(head)); cnt=1;
memset(iscut,0,sizeof(iscut));
memset(dfn,0,sizeof(dfn));
memset(fa,0,sizeof(fa));
memset(vis,0,sizeof(vis));
top=0; bcc=0;
int i,x,y,j;
for(i=1;i<=m;i++) scanf("%d%d",&x,&y),add(x,y),add(y,x),n=max(n,max(x,y));
for(i=1;i<=n;i++) {
if(!dfn[i]) {
dfs(rt=i);
}
}
int ans1=0; ll ans2=1;
// for(i=1;i<=n;i++) printf("%d\n",iscut[i]);
// printf("%d\n",bcc);
for(i=1;i<=bcc;i++) {
int lim=V[i].size(),num=0;
for(j=0;j<lim;j++) {
// printf("%d\n",V[i][j]);
if(iscut[V[i][j]]) num++;
}
// puts("FUCK");
if(num==1) ans1++,ans2=ans2*(lim-1);
}
if(bcc==1) ans1=2,ans2=1ll*(V[1].size()-1)*(V[1].size())/2;
printf("Case %d: %d %lld\n",Cas,ans1,ans2);
}
int main() {
while(scanf("%d",&m)!=EOF&&m) solve();
}
BZOJ_2730_ [HNOI2012]矿场搭建_点双联通分量的更多相关文章
- P3225 [HNOI2012]矿场搭建 割点 tarjan 双联通分量
https://www.luogu.org/problemnew/show/P3225 题意 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条 ...
- [HNOI2012]矿场搭建 BZOJ2730 点双+结论
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- 【BZOJ】2730: [HNOI2012]矿场搭建【Tarjan找割点】【分联通块割点个数】
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3230 Solved: 1540[Submit][Stat ...
- Tarjan 点双+割点+DFS【洛谷P3225】 [HNOI2012]矿场搭建
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- [HNOI2012]矿场搭建 (点双连通)
题目 [HNOI2012]矿场搭建 解析 这个题做的我十分自闭.. 没看出这个是个点双,然后一晚上+半上午.. 一看肯定和割点有关,我们找到所有的点双,会发现有这么几种情况 连通块中一个割点也没有,这 ...
- [BZOJ2730][HNOI2012]矿场搭建 点双 割点
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2852 Solved: 1344[Submit][Stat ...
- bzoj 2730: [HNOI2012]矿场搭建——tarjan求点双
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- BZOJ2730 矿场搭建 解题报告 点双联通分量
题意概述: 一张有向图,在其中设置一些关键点(即题目中的逃生出口),使得删除任意一个点之后其余点都可以到达至少一个关键点. 问至少需要设置多少中关键点,有多少种设置方法. 解析: 首先,这道题要求删掉 ...
- 洛谷 P3225 [HNOI2012]矿场搭建 解题报告
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
随机推荐
- Why is chkconfig no longer available in Ubuntu?
Question: I can not use chkconfig tools in Ubuntu 12.10 It's a very useful tools to configure the se ...
- iphone越狱-------平刷回越狱前(未越狱)状态
众所周知,iPhone采用了沙盒机制,应用之间不能任意的访问,所以很多机友在拿到iPhone后,往往选择进行越狱,但是有时候,越狱的手机有的时候在安全.性能.流畅性等方面表现并不如意,所以只好寻求重新 ...
- HeadFirst设计模式 之 C++实现(三):Decorator(装饰者模式)
装饰者模式是非常有意思的一种设计模式,你将可以在不改动不论什么底层代码的情况下.给你的(或别人的)对象赋予新的职责. 不是使用继承每回在编译时超类上改动代码,而是利用组合(composition)和托 ...
- 微信小程序制作商 业务流程
- jsp中获取spring 管理的bean(通过config)
WebApplicationContext wac = (WebApplicationContext)config.getServletContext().getAttribute(WebApplic ...
- What is love ? and how to do?
1.匹配度(matched-degree): 灵性 文化(东西方.南北方) 智力 审美 性 2.对待差异的原则(The principle of difference): 抓大放小 求同存异 心脑并用 ...
- android客户端向服务器端验证登陆方法的实现2
一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html android获取web服务 ...
- C# SQL 整表插入
说明: (1)表A的一部分数据插入到表B (2)DataAccess 类,是放在DAL层下的底层类; da.StrConnection 写在DataAccess类中; //整表插入方法 private ...
- Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例及配置文件具体解释
Linux(centos 6.5) 调用java脚本以及定时运行的脚本实例 一.调用java程序脚本(默认已经搭建好了Java环境) 1.jdk 安装路径 /usr/jdk/jdk1.7/-- 2.j ...
- win7-64bit下基于VMware12.5安装rhel-server-6.3-i386
/************************************************************************************* 宿主PC:win7-64b ...