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条路,求至少要新 ...
随机推荐
- html5 file 自定义文件过滤
使用 acctpe属性即可 示例: gif,jpg <input type="file" name="pic" accept="image/gi ...
- Java fluent风格
写个简单的例子,相信看了下面的例子,就会了解什么是fluent风格. 一.我们先写一个通常的,即不使用fluent风格 1.实体类 package com.xbq.demo.stu; /** * @C ...
- ContentPriver
共享应用程序内的数据, 在数据修改时可以监听 1.特点 ①.可以将应用中的数据对外进行共享: ②.数据访问方式统一,不必针对不同数据类型采取不同的访问策略: ③.内容提供者将数据封装,只暴露出我们希望 ...
- 你知道嵌入式C语言中各变量存储的位置吗?
局部变量.局部静态变量.全局变量.全局静态变量区别如下: 局部变量: 栈区: 局部静态变量:静态区: 全局变量: 静态区的常量区: 全局静态变量:静态区. 在进行C/C++编程时,需要程序员对内存的了 ...
- Tomcat优化详细教程
Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器.而且优化后的Tomcat性能提升显著,本文从以下几方面进行分析优化. 一.内存优化 默认情况下To ...
- 什么叫做hack
由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到 ...
- Swift-Swift的Singleton三种写法
第一种: import Foundation class SingletonA : NSObject { static let sharedInstance: SingletonA = Singlet ...
- TP框架控制器的空操作
在浏览器中输入tp框架入口文件的地址,如图 要注意,localhost/后面跟的是www的下一级,tp文件的上一级,因为我直接把tp文件做成了www目录的下一级,所以我写的地址localhost后面跟 ...
- java Log4j封装,程序任何位置调用
一般写log4j,每个类都会定义一个logger 明显这样太麻烦了, 然后封装了一下,明显好用多了. package tools; import java.io.IOException; import ...
- poj2096 Collecting Bugs[期望dp]
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 5394 Accepted: 2670 ...