【洛谷P3225】[HNOI2012]矿场搭建
2024-09-02 13:45:46
矿场搭建
根据题意,发生事故时会有一个挖煤点坍塌,
只有当这个点是割点,会对图的连通性产生影响,
我们首先Tarjan一遍找到所有割点,将原图除去这些割点后,
遍历一遍,找出所有连通块,分三种情况讨论:
1、该连通块连接着两个及以上的割点,这时如果有一个割点被摧毁,
还可以从另一个割点到达其他连通块,不需要建逃生通道
2、该连通块连接着一个割点,若这个割点被摧毁,该连通块的人就无法逃生,
必须建一个出口(从该连通块的所有节点中选一个,ans*=size)
3、该连通块没有割点相连,要建两个出口,如果其中一个被摧毁,还可以从另一个逃出去
ans*=C(size,2);
#include<algorithm>
#include<cstdio>
#define reset(a) std::fill(a,a+1+n,0)
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define N 50020
int n,m,dfn[N],low[N],vis[N],tot,k,T;
const int ch_top=4e7+;
char ch[ch_top],*now_r=ch-,*now_w=ch-;
inline int read(){
while(*++now_r<'');
register int x=*now_r-'';
while(*++now_r>='')x=x*+*now_r-'';
return x;
}
long long ans;
bool gd[N];
int Head[N],to[N<<],next[N<<],num;
void Tarjan(int u){
dfn[u]=low[u]=++tot;
int cnt=;
for(int i=Head[u];i;i=next[i]){
int v=to[i];
if(!dfn[v]){
Tarjan(v); cnt++;
low[u]=min(low[u],low[v]);
if((u==&&cnt>)||(u!=&&low[v]>=dfn[u]))
gd[u]=;
}
else low[u]=min(low[u],dfn[v]);
}
}
int dfs(int t){
int sz=; vis[t]=;
for(int i=Head[t];i;i=next[i])
if(!vis[to[i]]&&!gd[to[i]])
sz+=dfs(to[i]);
else if(vis[to[i]]!=T&&gd[to[i]]){
k++; vis[to[i]]=T;
}
return sz;
}
int main()
{
fread(ch,,ch_top,stdin);
int now=;
m=read();
while(m){
if(!m) break;
reset(Head); reset(gd);
reset(vis); reset(dfn);
num=tot=n=T=;
int x,y;
for(int i=;i<=m;i++){
x=read(); y=read();
to[++num]=y;
next[num]=Head[x];
Head[x]=num;
to[++num]=x;
next[num]=Head[y];
Head[y]=num;
n=max(n,max(x,y));
}
int cnt=;
Tarjan();ans=;
for(int i=;i<=n;i++)
if(!gd[i]&&!vis[i]){
k=; T++;
int size=dfs(i);
if(k==) ans*=(long long)size*(size-)/,cnt+=;
else if(k==) ans*=size,cnt++;
}
printf("Case %d: %d %lld\n",++now,cnt,ans);
m=read();
}
return ;
}
双倍经验:UVA1108
最新文章
- UML中的六大关系(转)
- 如何删除PHP数组中的元素,并且索引重排(unset,array_splice)?
- [hihoCoder1329] 带Split和Merge的Treap
- HTTP 状态代码表示什么意思?
- JavaScript系列:函数 自执行 表达式 声明 定义
- NoSQL数据库的分布式算法&;&;memcache集群的实现
- Win7 下硬盘安装Linux Mint 17
- puppet report import
- git commit -am 合并操作
- Android中使用HTTP服务
- 自然语言处理(NLP)常用开源工具总结(转)
- group by 和count 联合使用问题
- Nexus搭建私服 学习
- Bootstrap入门(二十七)JS插件4:标签页
- ABP PUT、DELETE请求错误405.0 - Method Not Allowed 因为使用了无效方法(HTTP 谓词) 引发客户端错误 No &#39;Access-Control-Allow-Origin&#39; header is present on the requested resource
- Django2.0文档
- call,apply,bind 方法的学习
- Target JRE version (1.7.0_79) does not match project JDK version (java version ";1.8.0_171";), will use sources from JDK: 1.7
- Git安装配置和提交本地代码至Github,修改GitHub上显示的项目语言
- MATLAB中的FOR循环问题
热门文章
- 数据段描述符和代码段描述符(二)——《x86汇编语言:从实模式到保护模式》读书笔记11
- centOS使用.htaccess
- FZU 2122 ——又见LKity——————【KMP字符串匹配】
- nyoj 568——RMQ with Shifts——————【线段树单点更新、区间求最值】
- 经典算法详解(1)斐波那契数列的n项
- Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)
- java poi reader常用API汇总
- 1094 FBI树
- angular1结合webpack构建工具
- easyui datagrid 获取行数据某个字段