these days I‘m tired!,but very happy。。。

#include<cstdio>
#include<cstring>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std; typedef long long lld; const int MAXN = <<; struct Edge
{
int u,v;
}; vector <int> G[MAXN],bcc[MAXN];
stack <Edge> S;
int pre[MAXN],is_cut[MAXN],bccno[MAXN];
int bcc_cnt,dfs_clock; int dfs(int u,int fa)
{
int low_u = pre[u] = ++dfs_clock;
int child = ;
for(int i = ;i < G[u].size();i++)
{
int v = G[u][i];
Edge e = (Edge){u,v};
if(!pre[v])
{
child++;
S.push(e);
int low_v = dfs(v,u);
low_u = min(low_u,low_v);
if(low_v >= pre[u])
{
is_cut[u] = ;
bcc_cnt++;
bcc[bcc_cnt].clear();
for(;;)
{
Edge x = S.top();
S.pop();
if(bccno[x.u] != bcc_cnt)
{
bcc[bcc_cnt].push_back(x.u);
bccno[x.u] = bcc_cnt;
}
if(bccno[x.v] != bcc_cnt)
{
bcc[bcc_cnt].push_back(x.v);
bccno[x.v] = bcc_cnt;
}
if(x.u == u && x.v == v)
break;
}
}
}
else if(pre[v] < pre[u] && v != fa)
{
S.push(e);
low_u = min(low_u,pre[v]);
}
}
if(child == && fa == -) is_cut[u] = ;
return low_u;
} void find_bcc(int n)
{
memset(pre,,sizeof(pre));
memset(is_cut,,sizeof(is_cut));
memset(bccno,,sizeof(bccno));
dfs_clock = bcc_cnt = ;
for(int i = ;i < n;i++)
if(!pre[i]) dfs(i,-);
} int main()
{
int cas = ;
int n;
while(~scanf("%d",&n) && n)
{
for(int i = ;i < *n;i++)
G[i].clear();
int max_id = ;
for(int i = ;i < n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
max_id = max(max_id,a);
max_id = max(max_id,b);
a--;b--;
G[a].push_back(b);
G[b].push_back(a);
} find_bcc(max_id);
//printf("bcc_cnt = %d\n",bcc_cnt); int ans_num = ;
lld ans_count = ;
if(bcc_cnt == )
{
ans_num = ;
ans_count = (lld)bcc[].size()*(bcc[].size()-)/;
}
else
{
for(int i = ;i <= bcc_cnt;i++)
{
int cc = ;
for(int j = ;j < bcc[i].size();j++)
if(is_cut[bcc[i][j]] == )
cc++;
if(cc == )
{
ans_num++;
ans_count *= bcc[i].size()-;
}
}
}
printf("Case %d: %d %lld\n",++cas,ans_num,ans_count);
}
return ;
}

Mining Your Own Business UVALive - 5135(点双联通分量)的更多相关文章

  1. 训练指南 UVALive - 3523 (双联通分量 + 二分图染色)

    layout: post title: 训练指南 UVALive - 3523 (双联通分量 + 二分图染色) author: "luowentaoaa" catalog: tru ...

  2. 训练指南 UVALive - 5135 (双连通分量)

    layout: post title: 训练指南 UVALive - 5135 (双连通分量) author: "luowentaoaa" catalog: true mathja ...

  3. 【UVA10972】RevolC FaeLoN (求边双联通分量)

    题意: 给你一个无向图,要求把所有无向边改成有向边,并且添加最少的有向边,使得新的有向图强联通. 分析: 这题的解法还是很好想的.先用边双联通分量缩点,然后找新图中入度为0和为1的点,入度为0则ans ...

  4. lightoj 1300 边双联通分量+交叉染色求奇圈

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1300 边双连通分量首先dfs找出桥并标记,然后dfs交叉着色找奇圈上的点.这题只要求在 ...

  5. HDU5409---CRB and Graph 2015多校 双联通分量缩点

    题意:一个联通的无向图, 对于每一条边, 若删除该边后存在两点不可达,则输出这两个点, 如果存在多个则输出第一个点尽可能大,第二个点尽可能小的. 不存在输出0 0 首先 若删除某一条边后存在多个联通分 ...

  6. poj2942(双联通分量,交叉染色判二分图)

    题意:一些骑士,他们有些人之间有矛盾,现在要求选出一些骑士围成一圈,圈要满足如下条件:1.人数大于1.2.总人数为奇数.3.有仇恨的骑士不能挨着坐.问有几个骑士不能和任何人形成任何的圆圈. 思路:首先 ...

  7. 『Tarjan算法 无向图的双联通分量』

    无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...

  8. 大白书中无向图的点双联通分量(BCC)模板的分析与理解

    对于一个无向图,如果任意两点至少存在两条点不重复(除起点和终点外无公共点)的路径,则这个图就是点双联通. 这个要求等价于任意两条边都存在于一个简单环(即同一个点不能在圈中出现两次)中,即内部无割点. ...

  9. 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths(tarjan求边双联通分量)

    题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...

随机推荐

  1. Mysql优化分页

    背景: 库里面有张表,日增数据量百万条: 之前查询: SELECT * FROM `res_battery_data_history` LIMIT 1797000,10;

  2. day4 CSS属性操作

    1.CSS属性 基本属性 height, 高度 百分比 width, 宽度 像素,百分比 text-align:ceter, 水平方向居中 line-height, 垂直方向根据标签高度 color. ...

  3. datax 执行流程分析

    https://www.jianshu.com/nb/29319571 https://www.jianshu.com/p/b10fbdee7e56

  4. hbase和ZooKeeper集群安装配置

    一:ZooKeeper集群安装配置 1:解压zookeeper-3.3.2.tar.gz并重命名为zookeeper. 2:进入~/zookeeper/conf目录: 拷贝zoo_sample.cfg ...

  5. HIVE中的数据怎么导出到hdfs或本地呢

    思路一:重定向 在我不知道工具 ,也不熟悉HIQL语法的情况下,没办法了,只有选择一个最简单粗暴的方法,重定向. 在shell中使用 hive -e 可以在shell中执行hive命令,hive -f ...

  6. spring-boot断点调试(IDEA)

  7. Viper--方便好用的Golang 配置库

    前言 本文主要是为读者介绍一个轻便好用的Golang配置库viper 正文 viper 的功能   viper 支持以下功能:   1. 支持Yaml.Json. TOML.HCL 等格式的配置   ...

  8. 基于zookeeper+mesos+marathon的docker集群管理平台

    参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...

  9. leetcode个人题解——#48 rotage image

    思路:本题要求不能利用额外的二维数组实现旋转,所以重点在于弄清矩阵旋转的数学方法. 我的方法是,首先按照副对角线进行对称,然后按照水平中轴线进行对称即可. class Solution { publi ...

  10. hadoop Datanode Uuid unassigned

    在配置hadoop的hdfs的时候,要首先格式化,然后才能启动,但是格式化的方式有的是不对出现Initialization failed for Block pool <registering& ...