首先和割点有关,求割点,然后这些割点应该把这个图分成了多个点双,可以考虑点双的缩点,假如缩点做的话我们要分析每个点双的性质和贡献

先拿出一个点双来,如果它没有连接着割点,那么至少要建两个,以防止其中一个塌陷,

如果它连接着一个割点,那么需要建一个,因为可以通过割点到其他点双,或者割点塌陷走这个点双中的出口

如果它连接着两个以上的割点,那么不需要建,因为可以随意到达其他点双。

事实上没必要缩点,只要dfs每个点双,类似于联通块(题解中直接说联通块容易有歧义)染色,记录点数和连接的割点数目

对于情况1,方案贡献C(点数,2)=(点数)*(点数-1)/2;

情况2贡献就是点数。每次ans2*=贡献

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,m,num,tot,deg,ans1,T,root;long long ans2;
struct node{
int v,nxt;
}e[maxn<<];
int head[maxn],cnt;
void add(int u,int v){
e[++cnt].v=v;e[cnt].nxt=head[u];head[u]=cnt;
}
int dfn[maxn],low[maxn],vis[maxn];
bool cut[maxn];
inline void init(){
memset(head,,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(cut,,sizeof(cut));
memset(vis,,sizeof(vis));
cnt=tot=n=ans1=T=;ans2=;
}
void tarjan(int x,int fa){
dfn[x]=low[x]=++tot;
for(int i=head[x];i;i=e[i].nxt){
int y=e[i].v;
if(!dfn[y]){
tarjan(y,x);
low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x]){
if(x==root)deg++;
else cut[x]=;
}
}
else if(y!=fa)low[x]=min(low[x],dfn[y]);
}
}
void dfs(int x){
vis[x]=T;
if(cut[x])return;
cnt++;
for(int i=head[x];i;i=e[i].nxt){
int y=e[i].v;
if(cut[y] && vis[y]!=T)num++,vis[y]=T;//统计割点数
if(!vis[y])dfs(y);
}
}
int main(){int t=;
while(){
scanf("%d",&m);if(m==)break;
init();
for(int i=,u,v;i<=m;i++){
scanf("%d%d",&u,&v);
add(u,v);add(v,u);n=max(n,max(v,u));
}
for(int i=;i<=n;i++){
if(!dfn[i])tarjan(root=i,);
if(deg>=)cut[root]=;
deg=;
}
for(int i=;i<=n;i++)
if(!vis[i] && !cut[i]){
T++;cnt=num=;
dfs(i);
if(!num)ans1+=,ans2*=cnt*(cnt-)/;
if(num==)ans1++,ans2*=cnt;
}
printf("Case %d: %d %lld\n",++t,ans1,ans2);
}
}

最新文章

  1. iOS开发之功能模块--本地序列化
  2. js学习心得之思维逻辑与对象上下文环境(一)
  3. 深度学习(DNN)的学习网站
  4. maya的卡通渲染
  5. 2.1 CMMI2级——7个PA简述
  6. JQuery基础二
  7. 标准IDispose模式浅析
  8. tornado解析http body的过程分析
  9. 学渣也要搞 laravel(3)—— HTTP控制器
  10. 菜鸟必备教程,ajax与xml交互传输数据。
  11. Google C++ style guide——头文件
  12. LeetCode 108: Convert Sorted Array to Binary Search Tree DFS求解
  13. null引用,有时候是实现了父类的方法,方法体没写任何实现
  14. 在CentOS6.9 x86下编译libusb-1.0.22遇到的两个问题
  15. JavaScript的文档对象模型DOM
  16. 小程序开发基础-swiper 滑块视图容器
  17. APIO2016赛艇
  18. 弄清AXI总线上每一个信号的含义
  19. cf-Global Round2-C. Ramesses and Corner Inversion(思维)
  20. (转)android:inputType参数类型说明

热门文章

  1. iTerm2常用的快捷键
  2. (linux)struct inode 和 struct file
  3. mtk6589显示子系统笔记(一)
  4. windows64位安装mysql-5.7.12,图文
  5. HDU3723 Delta Wave —— 卡特兰数
  6. 详细阐述ping命令中请求超时与无法访问的区别
  7. 记录下 hubot相关
  8. 在Eclipse Java EE编译器中修改Web项目的发布名称
  9. 「LuoguP3808」 【模板】AC自动机(简单版)
  10. [YNOI 2016] 掉进兔子洞