BZOJ 2730 矿场搭建 Tarjan求割点
思路:
Tarjan求出来点双&割点 判一判就行了
//By SiriusRen
#include <stack>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define int long long
#define N 66666
#define mem(x,y) memset(x,y,sizeof(x))
stack<int>stk;
int first[666],next[N],v[N],rec[666][666],dfn[666],low[666],tot,all,cnt;
int xx,yy,root,n,m,Point[666],ans1,ans2,cases;
void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void tarjan(int x,int fa){
dfn[x]=low[x]=++cnt;int num=0;
for(int i=first[x];~i;i=next[i]){
if(i==fa)continue;
if(!dfn[v[i]]){
stk.push(i),tarjan(v[i],i^1);
low[x]=min(low[x],low[v[i]]);
if(dfn[x]<=low[v[i]]){
all++;num++,rec[all][++rec[all][0]]=x;
do{
xx=stk.top();stk.pop();
rec[all][++rec[all][0]]=v[xx];
}while(xx!=i);
}
}
else low[x]=min(low[x],dfn[v[i]]);
}
if(((x==root)&&num>=2)||(x!=root&&num))Point[x]=1;
}
signed main(){
while(~scanf("%lld",&m)&&m){
mem(first,-1),mem(Point,0),mem(dfn,0),ans1=n=all=tot=0,ans2=1;
for(int i=1;i<=m;i++){
scanf("%lld%lld",&xx,&yy);
add(xx,yy),add(yy,xx);
n=max(n,max(xx,yy)),rec[i<<1][0]=rec[(i<<1)-1][0]=0;
}
for(int i=1;i<=n;i++)
if(!dfn[i])root=i,tarjan(i,-1);
for(int i=1;i<=all;i++){
int num=0;
for(int j=1;j<=rec[i][0];j++)
if(Point[rec[i][j]])num++;
if(num==1)ans1++,ans2*=(rec[i][0]-1);
else if(!num){
if(rec[i][0]==1)ans1++;
else ans1+=2,ans2=ans2*rec[i][0]*(rec[i][0]-1)/2;
}
}
printf("Case %lld: %lld %lld\n",++cases,ans1,ans2);
}
}
BZOJ 2730 矿场搭建 Tarjan求割点的更多相关文章
- bzoj 2730: [HNOI2012]矿场搭建——tarjan求点双
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- [BZOJ2730][HNOI2012]矿场搭建(求割点)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2730 分析: 如果坍塌的点不是割点,那没什么影响,主要考虑坍塌的点是割点的情况. 显然 ...
- BZOJ 2730 矿场搭建
割点 割点以外的点坍塌不影响其他人逃生,因为假设我们任取两个个非割点s建立救援站,非割点的任意点坍塌,我们都可以从割点走到一个救援出口. 所以我们只考虑割点坍塌的情况. 我们可以先找出图中所有的割点. ...
- bzoj 1123 [POI2008]BLO Tarjan求割点
[POI2008]BLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1540 Solved: 711[Submit][Status][Discu ...
- [POJ1144][BZOJ2730]tarjan求割点
求割点 一种显然的n^2做法: 枚举每个点,去掉该点连出的边,然后判断整个图是否联通 用tarjan求割点: 分情况讨论 如果是root的话,其为割点当且仅当下方有两棵及以上的子树 其他情况 设当前节 ...
- UESTC 900 方老师炸弹 --Tarjan求割点及删点后连通分量数
Tarjan算法. 1.若u为根,且度大于1,则为割点 2.若u不为根,如果low[v]>=dfn[u],则u为割点(出现重边时可能导致等号,要判重边) 3.若low[v]>dfn[u], ...
- POJ 1144 Network(Tarjan求割点)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12707 Accepted: 5835 Descript ...
- poj 1523 SPF(tarjan求割点)
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- poj_1144Network(tarjan求割点)
poj_1144Network(tarjan求割点) 标签: tarjan 割点割边模板 题目链接 Network Time Limit: 1000MS Memory Limit: 10000K To ...
随机推荐
- 堆(Heap)-c实现
这个堆的实现采用数组存储的完全二叉树实现. 最近有点烦躁,先是跳槽到了一个外包公司,感觉2016有点坑,另外一件事就是老婆怀孕了,但是在家里没人照顾,很担心. 这个堆的实现就暂时不优化了,基本的插入, ...
- thttpd 在S3C6410的移植-web服务程序的应用
1. 在VMWare 虚拟机上将arm-linux-gcc 4.3.1配置好:2. 下载thttpd软件包并解压:3. 在thttpd根目录下运行: ./configure:4. ...
- python购物车系统
购物车系统模拟:product_list = [ ('java',100), ('python',200), ('键盘',500), ('电脑',4000), ('mac Book',7000),]S ...
- [luogu]P4364 [九省联考2018]IIIDX
题目背景 Osu 听过没?那是Konano 最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在,他在世界知名游戏公司KONMAI 内工作,离他的梦想也越来越近了. 这款音乐 ...
- 疯狂软件对Oracle放弃Java EE的看法
近日网络上出现了一些关于Oracle将要放弃Java EE的说法,在Java行业引起不小的关注,甚至有些人开始担心Java会不会就此消亡,但事实上这不过是杞人忧天,疯狂软件教学总监李刚根据多年来Jav ...
- jquery及相关兼容插件的版本搭配
1.jquery1.11.0 + jquery.validate.1.9.0.js + jquery.ui.1.10.4.js
- 【JS】怎样用原生JS实现jQuery的ready方法
Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,只是与window.onload方法还是有差别的. 总的来说,window. ...
- PHP join() 函数
PHP join() 函数 实例 把数组元素组合为一个字符串: <?php $arr = array('Hello','World!','I','love','Shanghai!'); echo ...
- POJ 3187 全排列+杨辉三角(组合数)
思路: next_permutation()加个递推组合数随便搞搞就A了- //By SiriusRen #include <cstdio> #include <algorithm& ...
- MyBatis+mysql查询和添加数据
项目结构: Menu package com.mstf.dao; import java.util.Scanner; import org.apache.ibatis.session.SqlSessi ...