#include<cstdio>
#include<cstring>
#include<iostream>
#define M 508
using namespace std;
int T=,m,n,head[M],K,next[*M],u[*M],cnt,f[M],c[M],fa[M],dfn[M],low[M],time1,ans,bi[M],sum[M];
long long ans1=;
void jia(int a1,int a2)
{
cnt++;
next[cnt]=head[a1];
head[a1]=cnt;
u[cnt]=a2;
}
void tarjin(int a1,int deep)
{
time1++;
dfn[a1]=low[a1]=time1;
c[a1]=-;
int tot=;
for(int i=head[a1];i;i=next[i])
if(u[i]!=fa[a1])
{
fa[u[i]]=a1;
if(!c[u[i]])
{
tarjin(u[i],deep+);
low[a1]=min(low[a1],low[u[i]]);
tot++;
if(deep==&&tot>)
f[a1]=;
if(deep>&&low[u[i]]>=dfn[a1])
f[a1]=;
}
else if(c[u[i]]==-&&u[i]!=fa[a1])
low[a1]=min(low[a1],dfn[u[i]]);
}
c[a1]=;
}
void dfs(int a1)
{
c[a1]=;
if(!bi[a1])
bi[a1]=time1;
else
bi[a1]=-;
for(int i=head[a1];i;i=next[i])
if(!c[u[i]]&&!f[u[i]])
dfs(u[i]);
return;
}
int main()
{
for(;scanf("%d",&m),m;T++){
ans=cnt=n=;
ans1=;
memset(head,,sizeof(head));
memset(bi,,sizeof(bi));
memset(f,,sizeof(f));
memset(sum,,sizeof(sum));
for(int i=;i<=m;i++)
{
int a1,a2;
scanf("%d%d",&a1,&a2);
n=max(n,a1);
n=max(n,a2);
jia(a1,a2);
jia(a2,a1);
}
time1=;
for(int i=;i<=n;i++)
{
f[i]=;
c[i]=;
fa[i]=;
}
tarjin(,);
time1=;
for(int i=;i<=n;i++)
if(f[i])
{
memset(c,,sizeof(c));
for(int j=head[i];j;j=next[j])
if(!c[u[j]]&&!f[u[j]])
{
time1++;
dfs(u[j]);
}
}
for(int i=;i<=n;i++)
if(bi[i]!=-)
sum[bi[i]]++;
for(int i=;i<=time1;i++)
if(sum[i])
{
ans++;
ans1*=sum[i];
}
printf("Case %d: ",T);
if(ans)
printf("%d %lld\n",ans,ans1);
else
printf("2 %d\n",n*(n-)/);}
return ;
}

先用tarjin找割点 割点条件u1是树根,且有大于1棵子树,u1不是树根,low[u[i]]>dfn[u1],把和一个割点相连的联通块建出口。

bzoj 2730: [HNOI2012]矿场搭建的更多相关文章

  1. BZOJ 2730: [HNOI2012]矿场搭建( tarjan )

    先tarjan求出割点.. 割点把图分成了几个双连通分量..只需dfs找出即可. 然后一个bcc有>2个割点, 那么这个bcc就不用建了, 因为一定可以走到其他救援出口. 只有一个割点的bcc就 ...

  2. 【刷题】BZOJ 2730 [HNOI2012]矿场搭建

    Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...

  3. bzoj 2730: [HNOI2012]矿场搭建——tarjan求点双

    Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...

  4. bzoj 2730: [HNOI2012]矿场搭建【tarjan】

    先tarjan找割点和点双连通分量,然后对一个点双,如果没有割点,那么需要建立两个出口(割掉一个另一个备用):如果只有一个割点,出口可以设立在任意一个非割点的地方:如果有两个及以上个割点,就不用建出口 ...

  5. 【BZOJ】2730: [HNOI2012]矿场搭建【Tarjan找割点】【分联通块割点个数】

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3230  Solved: 1540[Submit][Stat ...

  6. bzoj2730 [HNOI2012]矿场搭建 (UVAlive5135 Mining Your Own Business)

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1147  Solved: 528[Submit][Statu ...

  7. [BZOJ2730][HNOI2012]矿场搭建 点双 割点

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2852  Solved: 1344[Submit][Stat ...

  8. BZOJ 2730:[HNOI2012]矿场搭建(割点+连通块)

    [HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖 ...

  9. 洛谷 P3225 [HNOI2012]矿场搭建 解题报告

    P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...

随机推荐

  1. 触发器创建及Navicat中使用

    mysql中的触发器(trigger)使用 Trigger: 示例: mysql,)); Query OK, rows affected (0.03 sec) mysql> CREATE TRI ...

  2. Codeforces 527C Glass Carving

    vjudge 上题目链接:Glass Carving 题目大意: 一块 w * h 的玻璃,对其进行 n 次切割,每次切割都是垂直或者水平的,输出每次切割后最大单块玻璃的面积: 用两个 set 存储每 ...

  3. embed object以及video标签的区别以及使用

    embed object以及video标签的区别以及使用?

  4. android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决

    在输入框中加入android:imeOptions="actionSearch",调用软键盘时,回车键就会显示搜索二字. 我想在点击搜索时,跳转到下一个页面,但是调用setOnKe ...

  5. 每日一笔记之2:QT之坐标系统:

    以前一直多单片机开发,也没怎么使用过大的显示器,第一次学习,备忘: QT画图系统. 绘图,通过QPainter类实现. Qt的绘图系统对底层函数进行了良好的封装,使得在屏幕和设备的绘图功能可能使用相同 ...

  6. smarty 学习记录

    smarty模版是比较大众化的一个模版,在php开发过程当中被很多开发者视为最友好的模版之一,学习smarty课程对于很多培训机构来说也是列入了培训课程之一,那么很多方面就需要我们学习了一. 安装首先 ...

  7. POJ 1218

    题目描述看着就乐了,死板得只按着题意来写了ps: tequi是escape的方言版.. #include <iostream> using namespace std; int main( ...

  8. Docker 使用指南 (一)—— 基本操作

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98来源:腾云阁 https://www.qcloud ...

  9. 网页上记录鼠标的点击次数和一段有用的php代码,自己学习使用

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 记一次基于Unity的Profiler性能分析

    A. WaitForTargetFPS: Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间    B. Overhead:       Profiler总体时间-所有单项的记录时间总和.用于 ...