bzoj2730(割点+分类讨论)
把割点删去后,剩下的联通块个数就是答案,方案数就是siz乘一起,但要讨论一些特殊情况,没有割点时答案直接算,一个联通块如果连接多个割点是不需算入答案的;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=;
struct edg{
int nxt,u,v;
}e[maxn<<];
int dfn[maxn],low[maxn],ind,is[maxn];
int last[maxn],t,cas,n,m,vis[maxn],cc,tim;
ll ans=,sum,cnt,tmp,w[maxn];
void add(int x,int y){
n=max(n,max(x,y));
++t;e[t].nxt=last[x];last[x]=t;e[t].v=y;
}
void dfs(int x,int fa){
low[x]=dfn[x]=++ind;
int child=;
for(int i=last[x];i;i=e[i].nxt){
int v=e[i].v;
if(v==fa)continue;
if(!dfn[v]){
child++;
dfs(v,x);
low[x]=min(low[x],low[v]);
if(fa&&low[v]>=dfn[x]){is[x]=;++cc;}
if(child>&&!fa){is[x]=;++cc;}
}
else low[x]=min(low[x],dfn[v]);
}
}
int solve(int x){
vis[x]=;
int siz=;
for(int i=last[x];i;i=e[i].nxt){
int v=e[i].v;
if(!vis[v]){
if(is[v]){
if(w[v]!=tim){cnt++;w[v]=tim;}
}
else siz+=solve(v);
}
}
return siz;
}
int main(){
while(scanf("%d",&m)!=EOF&&m){
printf("Case %d: ",++cas);
memset(last,,sizeof(last));
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
memset(vis,,sizeof(vis));
memset(is,,sizeof(is));
cc=tim=sum=n=t=ind=;ans=;
int x,y;
for(int i=;i<=m;++i){
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
for(int i=;i<=n;++i){
if(!dfn[i])dfs(i,);
}
if(!cc){printf("2 %d\n",n*(n-)/);continue;}
for(int i=;i<=n;++i)
if((!vis[i])&&(!is[i])){
++tim;
cnt=;
int tmp=solve(i);
//cout<<cnt<<' '<<tmp<<endl;
if(cnt<=){
sum++;
ans*=tmp;
}
}
printf("%lld %lld\n",sum,ans);
}
return ;
}
bzoj2730(割点+分类讨论)的更多相关文章
- Codeforces 460D Little Victor and Set --分类讨论+构造
题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...
- BZOJ-1067 降雨量 线段树+分类讨论
这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...
- UVaLive 6862 Triples (数学+分类讨论)
题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...
- 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil
1177: [Apio2009]Oil Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1477 Solved: 589[Submit] Descri ...
- Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array 分类讨论连续递推dp
题意:给出一个 数列 和一个x 可以对数列一个连续的部分 每个数乘以x 问该序列可以达到的最大连续序列和是多少 思路: 不是所有区间题目都是线段树!!!!!! 这题其实是一个很简单的dp 使用的是分 ...
- 【cf789B】Masha and geometric depression(分类讨论/暴力)
B. Masha and geometric depression 题意 在黑板上写数列,首项是b,公比是q,超过l时就停止不写.给定m个数,遇到后跳过不写.问一共写多少个数,如果无穷个输出inf. ...
- P2331 [SCOI2005]最大子矩阵 (动规:分类讨论状态)
题目链接:传送门 题目: 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k( ...
- UVa 11722 Joining with Friend (几何概率 + 分类讨论)
题意:某两个人 A,B 要在一个地点见面,然后 A 到地点的时间区间是 [t1, t2],B 到地点的时间区间是 [s1, s2],他们出现的在这两个区间的每个时刻概率是相同的,并且他们约定一个到了地 ...
- Bzoj4558:分类讨论 计算几何 组合数学
国际惯例的题面: 这题让我爆肝啦......这种计数显然容斥,正好不含任何坏点的我们不会算,但是我们能算至少含零个坏点的,至少含一个坏点的,至少含两个坏点的......所以最终的答案就是(至少含零个坏 ...
随机推荐
- 项目(八) Jenkins持续集成与构建
Jenkins环境搭建 由于Jenkins是依赖于java的,所以先介绍java环境的搭建 1)使用官方的二进制包解压安装,官方二进制包的下载地址:http://www.oracle.com/tech ...
- leetcode 字谜
242. Valid Anagram Easy 66298FavoriteShare Given two strings s and t , write a function to determine ...
- js获取地址栏上参数的值
function GetQuerystring(name){ var reg=new RegExp("(^|&)" + name +"=([^&]*)(& ...
- VS2015自定义工具栏,往工具栏上添加按钮
工具--自定义--命令
- 理解javascript中的立即执行函数(function(){})()
之前看了好多代码,都有用到这种函数的写法,但是都没认真的去想为什么会这样写,今天开始想学习下jquery的源码,发现jquery也是使用这种方式,用(function(window, undefine ...
- redis缓存雪崩,缓存穿透,缓存击穿的解决方法
一.缓存雪崩 缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部走数据库,有可能搞垮数据库,使整个服务瘫痪. 使缓存集中失效的原因: 1.redis服务器挂掉了. 2.对缓存数据设置了相同的过期时间 ...
- java学习(三)
学号 20189214 <Java程序设计>第三周学习总结 教材学习内容总结 核心类 java.lang.Object 所有的类都直接派生自这个类. java.lang.String St ...
- django2.0 + python3.6 在centos7 下部署生产环境的一些注意事项
一:mysql 与环境选用的坑 目前, 在生产环境部署django有三种方式: 1. apache + mod_wsgi 2. nginx + uwsigi 3. nginx + supervisor ...
- sql server 临时库文件太大 迁移tempdb数据库
由于装SQL Server时默认装在系统盘,使用一段时间后,tempdb数据库占了68G,导致整个C盘爆满,彻底解决办法就是迁移tempdb物理文件,移至其他大空间磁盘上. 将 tempdb 从其在磁 ...
- RNQOJ 21 FBI数
如果字符串全是0输出B,全是1输出I,01混合输出F,如果字符串分解到只剩下一个字符的时候我们可以很简单的判断出来是B串还是I串,如果处在父节点的位置,这里运用递归,通过子节点的返回值来判断子节点是混 ...