洛谷 P3225 [HNOI2012]矿场搭建
题目大意:建设几个出口,使得图上无论哪个点被破坏,都可以与出口联通。
题解:tarjian求割点
首先出口不能建在割点上,找出割点,图就被分成了几个联通块。
每个联通块,建出口。如果割点数为0,建两个出口,一个炸了,
另一个还可以走,那么方案数是c(size,2),如果割点为1个,那么
随便从联通块里建一个就好,割点炸了有新建的,新建的炸了还有
割点可以走,方案数是联通块大小。注意long long
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 5200
#define LL long long
using namespace std; int n,kis,sumedge,root,cnt,tim,head[maxn],low[maxn],dfn[maxn],iscut[maxn],vis[maxn];
LL ans=,tmp;
int cntcut,kuai; struct Edge{
int x,y,nxt;
Edge(int x=,int y=,int nxt=):
x(x),y(y),nxt(nxt){}
}edge[maxn<<]; void add(int x,int y){
edge[++sumedge]=Edge(x,y,head[x]);
head[x]=sumedge;
} void Tarjian(int x,int fa){
int cnt=;low[x]=dfn[x]=++tim;
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
if(v==fa)continue;
if(dfn[v]==){
cnt++;
Tarjian(v,x);
low[x]=min(low[x],low[v]);
if(x!=root&&low[v]>=dfn[x]&&iscut[x]==)iscut[x]=true;
if(x==root&&cnt>=&&iscut[x]==)iscut[x]=true;
}else low[x]=min(low[x],dfn[v]);
}
} void dfs(int x){
tmp++;vis[x]=kuai;
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
if(iscut[v]&&vis[v]!=kuai)cntcut++,vis[v]=kuai;
if(!vis[v])dfs(v);
}
} int main(){
while(){
scanf("%d",&n);
sumedge=;tim=;ans=;cnt=;
kuai=;memset(vis,,sizeof(vis));
memset(iscut,,sizeof(iscut));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(head,,sizeof(head));
if(!n)break;int xr=;
for(int i=;i<=n;i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
xr=max(max(x,y),xr);
}
for(int i=;i<=xr;i++)if(dfn[i]==)root=i,Tarjian(i,i);
for(int i=;i<=xr;i++){
tmp=;cntcut=;kuai++;
if(vis[i]==&&iscut[i]==){
dfs(i);if(cntcut==)cnt++,ans=1LL*ans*tmp;
if(cntcut==)cnt+=,ans=1LL*ans*tmp*(tmp-)/;
}
}
printf("Case %d: %d %lld\n",++kis,cnt,ans);
}
return ;
}
AC
洛谷 P3225 [HNOI2012]矿场搭建的更多相关文章
- 洛谷 P3225 [HNOI2012]矿场搭建 解题报告
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- 洛谷——P3225 [HNOI2012]矿场搭建
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- 洛谷P3225 HNOI2012 矿场搭建
题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之 ...
- 洛谷—— P3225 [HNOI2012]矿场搭建
https://www.luogu.org/problem/show?pid=3225 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有 ...
- BZOJ2730或洛谷3225 [HNOI2012]矿场搭建
BZOJ原题链接 洛谷原题链接 显然在一个点双连通分量里,无论是哪一个挖煤点倒塌,其余挖煤点就可以互相到达,而对于一个点双连通分量来说,与外界的联系全看割点,所以我们先用\(tarjan\)求出点双连 ...
- P3225 [HNOI2012]矿场搭建 割点 tarjan 双联通分量
https://www.luogu.org/problemnew/show/P3225 题意 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条 ...
- P3225 [HNOI2012]矿场搭建 题解
这道题挺难的,可以加深对割点的理解,还有,排列组合好重要了,分连通块,然后乘法原理(加法原理计数什么的) 传送门 https://www.luogu.org/problem/P3225 省选oi题 ...
- P3225 [HNOI2012]矿场搭建
传送门 对于一个点双联通分量,如果它连接了两个或更多割点 那么不论哪个点GG都有至少一条路通到其他的点双联通分量,所以我们不用考虑 如果它只连接一个割点,如果这个割点GG,那整个块也一起GG,所以要再 ...
- [Luogu] P3225 [HNOI2012]矿场搭建
题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之 ...
随机推荐
- 偶然发现有的IIS里的程序,连接 不上SQL Server数据库, 超时
经查应用程序池中, 有一个启用32位应用程序, 有时打开它就能连接上SQL SERVER了.
- java获取当前文件路径 [转]
1.如何获得当前文件路径 常用: 字符串类型:System.getProperty("user.dir"); 综合: package com.zcjl.test.base; imp ...
- 织梦DedeCMS实现 三级栏目_二级栏目_一级栏目_网站名称 的效果代码
1.将官方原来的排列方式反过来,找到include/typelink.class.php第164行 $this->valuePositionName = $tinfos['typename']. ...
- java基础(6)--数组和方法
数组 1. 什么是数组? 数组是相同数据类型的元素组成的集合.这些元素按线性顺序排列.所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素:除最后一个元素外,每一个元素都有唯一的后继元素.(“ ...
- linux 终端分屏命令
比如:某文件夹下有文件:vector.cc, substr.cc 1.使用vim命令打开任意一个文件:vim vector.cc打开第一个文件.如下图所示: 2.按:"Esc"键 ...
- .net 数据脱敏代码实现
方案一: DTO中处理: private string idNumber; /// <summary> /// 身份证号码 /// </summary> [Column(&qu ...
- scala学习手记7 - 运算符重载
从语法上来说scala是没有运算符的.之前的一节里也曾提到过scala的运算符实际上是方法名,如1 + 2实际上就是1.+(2).我们可以将之视为运算符,是因为scala的一个特性:如果方法的参数小于 ...
- HTML5 ——web audio API 音乐可视化(一)
使用Web Audio API可以对音频进行分析和操作,最终实现一个音频可视化程序. 最终效果请戳这里; 完整版代码请戳这里,如果还看得过眼,请给一个start⭐ 一.API AudioContext ...
- 监控和审计IBM InfoSphere BigInsights和Cloudera Hadoop的访问权限
http://www.ithov.com/server/124456.shtml 您也将学习一个仅适用于 IBM InfoSphere BigInsights 的快速启动监控实现. 大数据骚动主要集中 ...
- iOS自动化探索(四)自动化测试框架pytest - 安装和使用
自动化测试框架 - pytest pytest是Python最流行的单元测试框架之一, 帮助更便捷的编写测试脚本, 并支持多种功能复杂的测试场景, 能用来做app测试也能用作函数测试 官方文档: ht ...