UVA 10972 RevolC FaeLoN(边连通分量)
坑了我一天的题目。。跑了20ms挂了,就知道有个小毛病= =
无向图转有向图判强连通。
首先要知道什么样的无向图可以转化为强连通图?连通分量(环)自然是可以的;那么扩大范围(存在割顶),发现点连通分量也是可以的;再扩大范围(存在桥),明显不能满足。所以边连通分量是实现无向图与强连通图转化的界限。
那么如果原图本身不是边连通的呢?先缩点,问题转化为——怎样把无向无环图(森林)构建成边连通图:从度入手。其实真正要考虑的是叶子节点(degree==1),和部分根节点(degree==0或degree==1)。degree==0,需要加两条边;degree==1,一条;degree>=2,不需考虑。
注意:因为是有向边建图,每条边会加两次,所以s/2;但这样考虑还不完整,要(s+1)/2,附上一组数据。
#include<cstdio>
#include<cstring>
#include<vector>
#include<stack>
#include<algorithm>
#define clr(a,m) memset(a,m,sizeof(a))
#define ref(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int MAXN=; struct Edge{
int v,next,vis;
Edge(){}
Edge(int _v,int _next):v(_v),next(_next),vis(){}
}edge[MAXN*MAXN]; int head[MAXN],tol;
int low[MAXN],pre[MAXN],bccno[MAXN],bcc_cnt,dfs_clock;
int dg[MAXN]; stack<int>stk; void init()
{
tol=;
clr(head,-);
} void add(int u,int v)
{
edge[tol]=Edge(v,head[u]);
head[u]=tol++;
} void dfs(int u)
{
int v;
pre[u]=low[u]=++dfs_clock;
stk.push(u);
for(int i=head[u];i!=-;i=edge[i].next){
if(edge[i].vis)
continue;
edge[i].vis=edge[i^].vis=; v=edge[i].v;
if(!pre[v]){
dfs(v);
low[u]=min(low[u],low[v]);
}else if(!bccno[v])
low[u]=min(low[u],pre[v]);
}
if(pre[u]==low[u]){
bcc_cnt++;
do{
v=stk.top();
stk.pop();
bccno[v]=bcc_cnt;
}while(u!=v);
}
} void find_bcc(int n)
{
dfs_clock=bcc_cnt=;
memset(pre,,sizeof(pre));
memset(bccno,,sizeof(bccno)); ref(i,,n-)
if(!pre[i])
dfs(i);
} int main()
{
int n,m,u,v;
while(~scanf("%d%d",&n,&m))
{
init();
ref(i,,m-){
scanf("%d%d",&u,&v);
u--;v--;
add(u,v);
add(v,u);
}
find_bcc(n);
memset(dg,,sizeof(dg));
ref(i,,n-){
for(int j=head[i];j!=-;j=edge[j].next)
{
int v=edge[j].v;
if(bccno[i]!=bccno[v]){
dg[bccno[i]]++;
dg[bccno[v]]++;
}
}
}
int s=;
ref(i,,bcc_cnt){
if(dg[i]/==)
s+=;
else if(!dg[i])
s+=;
}
if(bcc_cnt==)printf("0\n");
else printf("%d\n",(s+)/);
}
return ;
}
/*
3 3
1 2 2 3 3 1 10 12
1 2
2 3
3 4
4 2
1 5
5 6
6 7
7 5
1 8
8 9
9 10
10 8
*/
UVA 10972 RevolC FaeLoN(边连通分量)的更多相关文章
- UVA 10972 - RevolC FaeLoN(边-双连通分量)
UVA 10972 - RevolC FaeLoN option=com_onlinejudge&Itemid=8&page=show_problem&category=547 ...
- uva 10972 RevolC FaeLoN cdoj 方老师和农场
//自己写的第一发tarjan 解:先进行双连通分解并缩点,分解后一定是一颗树,设叶节点个数为n那么答案就是(n+1)/2 关于双连通分量求解:在跑tarjan时判断每个点连向父节点的边是否是桥,如果 ...
- UVA 10972 RevolC FaeLoN(边-双连通+缩点)
很好的一道图论题,整整撸了一上午... 题意是给定一个无向图,要求将所有边变为有向边,求最少加入多少条有向边,使得该图强连通?这里先假设一个问题:给定一个无向子图,该子图具有怎样的性质才能使得将其无向 ...
- UVA - 10972 RevolC FaeLoN
一道特别好的题qwq. 题目大意就是给你一个无向图,让你把边定向之后再加一些边使得这个图强连通,求最少需要加多少边. 一开始毫无头绪23333,数据范围让人摸不着头脑..... 然后开始画图,,,发现 ...
- UVA10972 - RevolC FaeLoN(双连通分量)
题目链接 题意: 给定一个无向图,问最少加入多少条边,使得这个图成为连通图 思路:首先注意题目给出的无向图可能是非连通的,即存在孤立点.处理孤立点之后.其它就能够当作连通块来处理.事实上跟POJ335 ...
- 【RevolC FaeLoN Uva 10972】
·无向图转有向图,经典而美妙. ·英文题,述大意: 输入一个无向图(不一定联通),现在询问:是否可以将每一条无向边定向,并为新图添加最少的新的有向边,使得原图强联通. ·分析: ...
- uva 10972(边双连通分量)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33804. 思路:和poj的一道题有点像,不过这道题图可能不连通,因 ...
- UVA-10972 RevolC FaeLoN (边双连通+缩点)
题目大意:将n个点,m条边的无向图变成强连通图,最少需要加几条有向边. 题目分析:所谓强连通,就是无向图中任意两点可互达.找出所有的边连通分量,每一个边连通分量都是强连通的,那么缩点得到bcc图,只需 ...
- 【UVA10972】RevolC FaeLoN (求边双联通分量)
题意: 给你一个无向图,要求把所有无向边改成有向边,并且添加最少的有向边,使得新的有向图强联通. 分析: 这题的解法还是很好想的.先用边双联通分量缩点,然后找新图中入度为0和为1的点,入度为0则ans ...
随机推荐
- java连接sqlserver2008报错 java.sql.SQLException: 对象名 '表名' 无效.
注意:c3p0的数据库配置方式为: <named-config name="sqlsvr"> <property name="driverClass&q ...
- segment fault
http://blog.chinaunix.net/uid-23069658-id-3959636.html
- UVA 714 Copying Books 二分
题目链接: 题目 Copying Books Time limit: 3.000 seconds 问题描述 Before the invention of book-printing, it was ...
- Window7中Eclipse运行MapReduce程序报错的问题
按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程 ...
- iOS开发之深入探讨runtime机制01-类与对象
最近有个同事问我关于“runtime机制”的问题,我想可能很多人对这个都不是太清楚,在这里,和大家分享一下我对于runtime机制的理解.要深入理解runtime,首先要从最基本的类与对象开始,本文将 ...
- 【系统Configmachine.config与自己的应用程序的App.config/Web.Config配置节点重复】解决方法
自己的应用程序的App.config或Web.Config文件中与系统的C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Configmachine.co ...
- 宏基5750G 不能用内置无线网卡上网
宏基5750G 不能用内置无线网卡上网 具体体现在: 1.--> 搜索不到无线网络: 2.点击“打开网络和共享中心”-->没有“管理无线网络”一项.如果正常的话应该是这样的: 3.“我的电 ...
- VS2010字体设置+推荐字体
字体的设置在工具->选项->环境->字体和颜色. 相信大家在用VS2010的时候都会觉得默认的字体不是很好看,尤其是看的时间长了以后,更是累眼睛,这里推荐一个字体,个人感觉像是加粗加 ...
- Chp11: Sorting and Searching
Common Sorting Algo: Bubble Sort: Runime: O(n2) average and worst case. Memory: O(1). void BubbleSor ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...