[HNOI2012] 矿场搭建
/*
codevs 1996 连通性问题
Tarjan+割点 可以感性的想一想 一定炸割点最好
否则 没有什么影响 先求出割点来
对于剩下的点们 缩一下 当然不能包括割点
这里的缩 因为删了割点就不是纯粹的双连通分量了
所以Dfs缩点 不走割点
然后这张图就成了一些被割点分开的联通块
如果一个块块连着两个割点 那么这里面就不用建
因为一边的炸了可以走另一边
相对的如果这个块块只连着一个割点那么就必须建一个 位置随便
如果没有连着割点的话 就在内部选两个
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#define maxn 510
using namespace std;
int n,m,num,head[maxn],topt,c[maxn],r[maxn],matc[maxn],ans,cas;
int f[maxn],low[maxn],dfn[maxn],sum,size[maxn];
ll cnt;
struct node{
int v,pre;
}e[maxn*maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Add(int from,int to){
e[num].v=to;
e[num].pre=head[from];
head[from]=num++;
}
void Cl(){
ans=;cnt=;topt=;sum=;num=;n=;
memset(head,-,sizeof(head));
memset(size,,sizeof(size));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(matc,,sizeof(matc));
memset(f,,sizeof(f));
memset(r,,sizeof(r));
memset(c,,sizeof(c));
}
void Dfs(int u,int from){
dfn[u]=low[u]=++topt;int x=;
for(int i=head[u];i!=-;i=e[i].pre){
int v=e[i].v;
if((i^)==from)continue;
if(!dfn[v]){
x++;Dfs(v,i);low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u])c[u]=;
}
else low[u]=min(low[u],dfn[v]);
}
if(from<&&x==)c[u]=;
}
void dfs(int x){
f[x]=;size[sum]++;
for(int i=head[x];i!=-;i=e[i].pre){
int v=e[i].v;
if(f[v])continue;
if(c[v]==)dfs(v);
else if(matc[v]!=sum){
matc[v]=sum;r[sum]++;
}
}
}
int main()
{
while(){
m=init();int u,v;
if(m==)break;Cl();
while(m--){
u=init();v=init();
Add(u,v);Add(v,u);
n=max(n,u);n=max(n,v);
}
for(int i=;i<=n;i++)
if(dfn[i]==)Dfs(i,-);
for(int i=;i<=n;i++)
if(c[i]==&&f[i]==){
sum++;dfs(i);
}
if(sum==){
ans=;cnt=cnt*(ll)n*(n-)/;
}
else {
for(int i=;i<=sum;i++)
if(r[i]==){
ans++;cnt=cnt*(ll)size[i];
}
}
printf("Case %d: %d ",++cas,ans);cout<<cnt<<endl;
}
return ;
}
[HNOI2012] 矿场搭建的更多相关文章
- bzoj2730 [HNOI2012]矿场搭建 (UVAlive5135 Mining Your Own Business)
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1147 Solved: 528[Submit][Statu ...
- BZOJ 2730: [HNOI2012]矿场搭建( tarjan )
先tarjan求出割点.. 割点把图分成了几个双连通分量..只需dfs找出即可. 然后一个bcc有>2个割点, 那么这个bcc就不用建了, 因为一定可以走到其他救援出口. 只有一个割点的bcc就 ...
- 洛谷 P3225 [HNOI2012]矿场搭建 解题报告
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- 【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]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- [luoguP3325][HNOI2012]矿场搭建
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- [BZOJ2730][HNOI2012]矿场搭建 点双 割点
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2852 Solved: 1344[Submit][Stat ...
- 【BZOJ2730】[HNOI2012]矿场搭建 Tarjan
[BZOJ2730][HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处. ...
- BZOJ 2730:[HNOI2012]矿场搭建(割点+连通块)
[HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖 ...
- BZOJ_2730_ [HNOI2012]矿场搭建_点双联通分量
BZOJ_2730_ [HNOI2012]矿场搭建_点双联通分量 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路 ...
随机推荐
- int和Integer——个人学习
1.首先要知道Java的八大基本数据类型:short.int.long.float.double.char.byte.boolean. 2.这八种基本数据类型对应的包装类分别为:Short.Integ ...
- js将数字转换成大写的人民币表达式
function changeNumMoneyToChinese(money) { var cnNums = new Array("零", "壹", " ...
- Linux内核监控模块-2-系统调用表地址的获取(Linux内核版本3.13)
那么在Linux内核2.6之后,不能直接导出sys_call_table的地址后,我们要如何获得系统调用表的地址,从而实现系统调用的截获呢. 先贴上我实现好的代码,然后再来讲解吧. modu.c #i ...
- HTTP 状态代码
转自:https://support.google.com/webmasters/answer/40132 HTTP 状态代码 如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通 ...
- Spark、Shark集群安装部署及遇到的问题解决
1.部署环境 OS:Red Hat Enterprise Linux Server release 6.4 (Santiago) Hadoop:Hadoop 2.4.1 Hive:0.11.0 JDK ...
- Resharper中注释代码的快捷键
Resharper中 Visual Studio中 注释代码 Ctrl+Alt+/ Ctrl+E+C 取消注释 Ctrl+Alt+/ ...
- 我要爱死这个markdown 了
今天上班依旧看wpdang的文章,最后作者说,文章使用markdown写的,好奇心促使我搜了一把什么是markdown.然后看到了这篇文章,一瞬间就开始兴奋了.顿时觉得,这个东西太好用 了,简直又激起 ...
- lambda -- Filter Java Stream to 1 and only 1 element
up vote10down votefavorite I am trying to use Java 8 Streams to find elements in a LinkedList. I wan ...
- Light OJ 1038 - Race to 1 Again(概率DP)
题目的意思是说任何一个大于1的整数,经过若干次除以自己的因子之后可以变为1, 求该变换字数的数学期望值. 题目分析: 我们设置dp[n] 为数字n的期望.假设n的因子为k1, k2, k3.... ...
- 【转】在ubuntu环境下搭建svn server遇到的一些问题
原文网址:http://www.cnblogs.com/pcchinadreamfly/archive/2012/11/24/2786046.html 前段时间在ubuntu 12.04lts上倒腾了 ...