这是一道用tarjin求双连通分量的题;

其中,不需要修的道路就是桥的数目;

在图的每个极大环中,如果点的数目小于边的数目,显然这个环中含有子环,并且这个环的边数就是这个环中有冲突的边的数目;

如果点的数模等于边的数目,那就没有冲突;

代码:

 #include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
#define maxn 10005 vector<int>g[maxn];
int block[maxn],top,stack[maxn],dfn[maxn],low[maxn],index,res1,res2;
bool instack[maxn],vis[maxn]; void count_edge()
{
memset(vis,,sizeof vis);
for(int i=; i<=block[]; i++)
vis[block[i]]=;
int sum=;
for(int i=; i<=block[]; i++)
{
int w=block[i];
for(int j=; j<g[w].size(); j++)
if(vis[g[w][j]])
sum++;
}
sum/=;//这个块中的边数
if(sum<block[])
res1+=sum;
if(sum>block[])
res2+=sum;
}
void tarjan(int v)
{
dfn[v]=low[v]=++index;
stack[++top]=v;
instack[v]=true;
for(int i=; i<g[v].size(); i++)
{
int w=g[v][i];
if(!dfn[w])
{
tarjan(w);
low[v]=min(low[v],low[w]);
if(low[w]>=dfn[v])
{
block[]=;
while()
{
block[++block[]]=stack[top];
instack[stack[top]]=;
if(stack[top--]==w)break;
}
block[++block[]]=v;
count_edge();
}
}
else if(instack[w])
low[v]=min(low[v],dfn[w]);
}
} int main ()
{
int n,m,x,y;
while(scanf("%d%d",&n,&m)== && n+m)
{
for(int i=; i<n; i++)g[i].clear();
for(int i=; i<m; i++)
{
scanf("%d%d",&x,&y);
g[x].push_back(y);
g[y].push_back(x);
}
memset(dfn,,sizeof dfn);
memset(low,,sizeof low);
memset(instack,,sizeof instack);
top=index=res1=res2=;
for(int i=; i<n; i++)if(!dfn[i])tarjan(i);
printf("%d %d\n",res1,res2);
}
return ;
}

hdu 3394 Railway的更多相关文章

  1. HDU 3394 Railway —— (点双联通,记录块信息)

    这题是比较模板的找点双联通并记录的题目. 题意大概是:一个公园有n个景点,1.所有游客都是绕环旅游的,找出所有不在环内的路的条数:2.如果两个环中有重复的边,那么这些边是冲突的,问冲突的边的总数. 分 ...

  2. HDU 3394 双连通分量 桥 Railway

    第一个答案是统计图中桥的个数 如果一个点-双连通分量中边的个数大于点的个数那么这个块中所有的边都是冲突的,累加到第二个答案中去. #include <iostream> #include ...

  3. hdu 3394(点双连通)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 思路:题目的意思是要求无向图中的冲突边和不需要边的条数,如果一个块中有多个环,则该块中的每条边都 ...

  4. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  5. 备战noip week8

    POJ1144 网络 description: 给出一张\(N\)个点的无向图,求其中割点的个数 data range: \(N\le 100\) solution: 一道模板题(但是读入实在是把我恶 ...

  6. HDU3394 Railway —— 点双联通分量 + 桥(割边)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 Railway Time Limit: 2000/1000 MS (Java/Others)   ...

  7. HDU3394:Railway

    传送门 点双练习. 对于一张图,询问有多少条边不属于任意一个点双和多少条边至少属于两个点双. 显然,一张图里有多少个桥就是第一问的答案. 对于第二问,考虑对于一个点双,如果其中的边数等于点数,那么这个 ...

  8. NOIP 考前 Tarjan复习

    POJ 1236 给定一个有向图,求: 1) 至少要选几个顶点,才能做到从这些顶点出发,可以到达全部顶点 2) 至少要加多少条边,才能使得从任何一个顶点出发,都能到达全部顶点 第一个就是缩点之后有多少 ...

  9. Tarjan LCA

    强连通 迷宫城堡 Proving Equivalences Equivalent Sets Summer Holiday Intelligence System The King's Problem ...

随机推荐

  1. Flume简介与使用(一)——Flume安装与配置

    Flume简介与使用(一)——Flume安装与配置 Flume简介 Flume是一个分布式的.可靠的.实用的服务——从不同的数据源高效的采集.整合.移动海量数据. 分布式:可以多台机器同时运行采集数据 ...

  2. 使用nexus创建maven私有仓库

    nexus安装 nexus下载 wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.1-01-bundl ...

  3. what is delta simulation time

    In digital logic simulation, a delta cycles are evaluation of expressions, followed by value updates ...

  4. 单台电脑上启动多个Modelsim图形环境窗口的简单办法(windows)

    1 单台电脑上启动多个Modelsim图形环境窗口的简单办法(windows) http://blog.21ic.com/user1/3128/archives/2010/73447.html   单 ...

  5. .net+easyui系列--按钮

    easyui提供了各种按钮样式,包括搜索.新增.保存.删除等 <a id="btn" href="#" class="easyui-linkbu ...

  6. Integer跟int的区别(备份回忆)

    int与Integer的区别 int 是基本数据类型Integer是其包装类,注意是一个类.为什么要提供包装类呢???一是为了在各种类型间转化,通过各种方法的调用.否则 你无法直接通过变量转化.比如, ...

  7. [转] c# 数据类型占用的字节数

    http://www.cnblogs.com/laozuan/archive/2012/04/24/2467888.html

  8. AWK详细用法

    awk非常的优秀,运行效率高,而且代码简单,对格式化的文本处理能力超强.基本上grep和sed能干的活awk全部都能干,而且干得更好. 先来一个很爽的例子:文件a,统计文件a的第一列中是浮点数的行的浮 ...

  9. JS模版引擎[20行代码实现模版引擎读后感]

    曾经阅读过<只有20行JAVASCRIPT代码, 手把手教你写一个页面模版引擎>这篇文章, 对其中实现模版的想法实在膜拜, 于是有了这篇读后感, 谈谈自己对模版引擎的理解, 以及用自己的语 ...

  10. 页面资源预加载(Link prefetch)功能加速你的页面加载速度

    有了浏览器缓存,为何还需要预加载? 用户可能是第一次访问网站,此时还无缓存 用户可能清空了缓存 缓存可能已经过期,资源将重新加载 用户访问的缓存文件可能不是最新的,需要重新加载 页面资源预加载/预读取 ...