大白书 P314

#include <iostream>
#include <algorithm>
#include <string.h>
#include <stack>
#include <vector>
#include <cstdio>
#include <map>
using namespace std; typedef long long LL; struct Edge{int u,v; }; const int maxn = +;
int pre[maxn],iscut[maxn],bccno[maxn], dfs_clock,bcc_cnt;
vector<int> G[maxn],bcc[maxn];
stack<Edge> S; int dfs(int u, int fa){ int lowu = 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]){
S.push(e);
child++;
int lowv = dfs(v,u);
lowu = min(lowu, lowv);
if(lowv>=pre[u]){
iscut[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);
lowu = min(lowu, pre[v]);
}
}
if(fa< && child == ) iscut[u] = ;
return lowu;
}
struct ID {
map<int, int> m;
int cnt;
ID():cnt() { }
int get(int x) {
if(!m.count(x)) m[x] = cnt++;
return m[x];
}
};
int main()
{
int kase = , n;
while(scanf("%d",&n) == && n){
memset(pre,,sizeof(pre));
memset(iscut,,sizeof(iscut));
memset(bccno,,sizeof(bccno));
for(int i =; i<n*; ++i)
G[i].clear();
dfs_clock = bcc_cnt = ;
ID id;
for(int i = ; i<n; ++i ){
int u,v;
scanf("%d%d",&u,&v);
u=id.get(u); v= id.get(v);
G[u].push_back(v); G[v].push_back(u);
}
dfs(,-);
LL ans1 = , ans2 =;
for(int i = ; i<=bcc_cnt ; ++i){
int cut_cnt = ;
for(int j=; j<bcc[i].size(); ++j)
if(iscut[bcc[i][j]]) cut_cnt++;
if(cut_cnt == ){
ans1++ ; ans2*= (long long )(bcc[i].size() - cut_cnt);
}
}
if(bcc_cnt==){
ans1=; ans2 = bcc[].size() *( bcc[].size() - )/;
}
printf("Case %d: %lld %lld\n",++kase, ans1, ans2);
}
return ;
}

la5135 无向图 点-双连通 运用的更多相关文章

  1. POJ3177,/3352.求最少添加多少边使无向图边双连通

    俩个题一样.tarjan算法应用,开始求桥,WA,同一个边双连通分量中low值未必都相同,不能用此来缩点.后来用并查集来判断,若不是桥,则在一个双连通分量中,并之,后边再查,将同一个双连通分量中的点通 ...

  2. poj1515--Street Directions(边的双连通)

    给一个无向图,要求变成强连通的有向图,需要保留哪些边. 边的双连通,对于桥保留两条边,其他的只保留一条边.求双连通的过程中记录保留边. /******************************* ...

  3. poj3177--Redundant Paths(边的双连通)

    有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路.两条独立的路是指:没有公共边的路,但可以 ...

  4. 图的强连通&双连通

    http://www.cnblogs.com/wenruo/p/4989425.html 强连通 强连通是指一个有向图中任意两点v1.v2间存在v1到v2的路径及v2到v1的路径. dfs遍历一个图, ...

  5. POJ 3352 无向图边双连通分量,缩点,无重边

    为什么写这道题还是因为昨天多校的第二题,是道图论,HDU 4612. 当时拿到题目的时候就知道是道模版题,但是苦于图论太弱.模版都太水,居然找不到. 虽然比赛的时候最后水过了,但是那个模版看的还是一知 ...

  6. HDU 2460 Network(双连通+树链剖分+线段树)

    HDU 2460 Network 题目链接 题意:给定一个无向图,问每次增加一条边,问个图中还剩多少桥 思路:先双连通缩点,然后形成一棵树,每次增加一条边,相当于询问这两点路径上有多少条边,这个用树链 ...

  7. (中等) CF 555E Case of Computer Network,双连通+树。

    Andrewid the Android is a galaxy-known detective. Now he is preparing a defense against a possible a ...

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

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

  9. POJ 3177 Redundant Paths (边双连通+缩点)

    <题目链接> <转载于 >>>  > 题目大意: 有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新 ...

随机推荐

  1. SPI接口功能描述

  2. IIS7以上版本去掉伪静态去掉index.php方法

    1,由于从iis7以上的版本httpd.ini文件已不会被解析,将以下的xml文件复制到web.config 的文件中,然后放到网站的根目录即可. <?xml version="1.0 ...

  3. Oracle 11G Client 客户端安装步骤(图文详解)

    http://www.cnblogs.com/jiguixin/archive/2011/09/09/2172672.html 下载地址: http://download.oracle.com/otn ...

  4. 【Laravel】Mac下玩转Laravel

    1 apache 首先Mac系统是自带了Apache,只需要执行 sudo apachectl start 就可以打开Apache服务,然后访问 http://localhost 就可以访问到,it' ...

  5. LeetCode——Submission Details

    Description: Given a string of numbers and operators, return all possible results from computing all ...

  6. MyBatis官方文档——入门

    入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可. 如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 ...

  7. 【Android 7.1.1】 锁屏界面点击“空白处”响应事件

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLa ...

  8. SMGP3.0协议的概念知识

    该项目主页在https://code.google.com/archive/p/smgp/,可以使用VPN进去看看,该项目是开源的,根据SMGP3.0协议写的API,我们要用的话直接调用就好了,这里主 ...

  9. jquery插件方式实现table查询功能

    1.写插件部分,如下: ;(function($){ $.fn.plugin = function(options){ var defaults = { //各种属性,各种参数 } var optio ...

  10. Redis连接(二)

    Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语 ...