la5135 无向图 点-双连通 运用
大白书 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 无向图 点-双连通 运用的更多相关文章
- POJ3177,/3352.求最少添加多少边使无向图边双连通
俩个题一样.tarjan算法应用,开始求桥,WA,同一个边双连通分量中low值未必都相同,不能用此来缩点.后来用并查集来判断,若不是桥,则在一个双连通分量中,并之,后边再查,将同一个双连通分量中的点通 ...
- poj1515--Street Directions(边的双连通)
给一个无向图,要求变成强连通的有向图,需要保留哪些边. 边的双连通,对于桥保留两条边,其他的只保留一条边.求双连通的过程中记录保留边. /******************************* ...
- poj3177--Redundant Paths(边的双连通)
有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路.两条独立的路是指:没有公共边的路,但可以 ...
- 图的强连通&双连通
http://www.cnblogs.com/wenruo/p/4989425.html 强连通 强连通是指一个有向图中任意两点v1.v2间存在v1到v2的路径及v2到v1的路径. dfs遍历一个图, ...
- POJ 3352 无向图边双连通分量,缩点,无重边
为什么写这道题还是因为昨天多校的第二题,是道图论,HDU 4612. 当时拿到题目的时候就知道是道模版题,但是苦于图论太弱.模版都太水,居然找不到. 虽然比赛的时候最后水过了,但是那个模版看的还是一知 ...
- HDU 2460 Network(双连通+树链剖分+线段树)
HDU 2460 Network 题目链接 题意:给定一个无向图,问每次增加一条边,问个图中还剩多少桥 思路:先双连通缩点,然后形成一棵树,每次增加一条边,相当于询问这两点路径上有多少条边,这个用树链 ...
- (中等) CF 555E Case of Computer Network,双连通+树。
Andrewid the Android is a galaxy-known detective. Now he is preparing a defense against a possible a ...
- 『Tarjan算法 无向图的双联通分量』
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...
- POJ 3177 Redundant Paths (边双连通+缩点)
<题目链接> <转载于 >>> > 题目大意: 有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新 ...
随机推荐
- YARN应用程序开发和设计流程
从业务的角度看,一个应用需要分两部分进行开发,一个是接入YARN平台,实现3个协议,通过YARN实现对集群资源的访问和利用:另一个是业务功能的实现,这个与YARN本身没有太大关系.下面主要阐述如何将一 ...
- Linux mysql 命令
mysql 是 MySQL 服务的一个命令行工具,常见用法如下: [root@localhost ~]$ mysql -uroot -p' # 本地连接 MySQL 服务 [root@localhos ...
- Python 使用正则表达式匹配电话号码
一个电话号码,如果区号为3位,那么区号后面的数字为8位:如果区号为4位,那么区号后面的数字为7位 In [1]: import re In [2]: number = "020-232432 ...
- 多线程的学习与GDI的学习
今天又是一周的周五,感觉过的好快,我感觉不是期盼周末的到来,而是感觉现在已经习惯啦每天坐在这里敲代码,其实我是一个性格非常开朗的女生,现在不知道为什么感觉默默地坐在自己位置上面敲代码成为了我习以为常的 ...
- 关于IIS Express,集成管道
一直没了解IIS Express是什么,现在也一样 暂时先做个记录 有关IIS Express的config http://www.cnblogs.com/IPrograming/archive/20 ...
- poj_3352 连通图的桥
题目大意 给定N个点,他们之间用一些双向边连通,使得这N个点两两相互可达.但是其中某些双向边为桥,这样若断开这些桥,则整个图就无法做到点之间两两可达.现在可以添加若干条双向边,使得断开图中的任意一条边 ...
- CSS-项目中遇到IE兼容问题,处理随笔
总是忘记给ie做特殊样式处理,以前打游击,不做也就算了,以后可不行,得对自己的“孩子”负责.. 一.先说IE老大的兼容 知道了一些常用的css属性兼容方法确实可以解决问题, 但我不知道我自己的ieTe ...
- .net asp [转载]ASP:循环滚动图片的代码+解释
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Oracle各种表空间
system表空间:含数据字典信息 sysaux表空间:存储各种oracle应用的元数据(如AWR的操作数据) 创建表空间后,不能改变区尺寸 区尺寸管理:自动分配(AUTOALLOCATE):小段64 ...
- JS实现拖拽效果
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...