这是一道用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. 配置servers时,错误:Setting property 'source' to 'org.eclipse.jst.jee.server:hczm' did not find a matching property

    WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.e ...

  2. php笔记07:http响应详解(禁用缓存设置和文件下载)

    演示如何通过Http响应控制页面缓存,在默认情况下,浏览器是会缓存页面的1.禁用缓存设置 (1).我在...\htdocs\http文件夹,写一个cache.php文件如下: <?php ech ...

  3. 20151209jquery学习笔记Ajax 代码备份

    /*$(function () { $("input").click(function() { $.ajax({ type:'POST', url:'test.php', data ...

  4. 将Excel,ppt和word转化为html

    有些时候可能需要将Excel,ppt和word转化为html在页面上显示.我从网上查到一些代码,记录在这里以供需要的朋友参考 1.将word转化为html显示 //================== ...

  5. WKWebView详解

    WKWebView是在Apple的WWDC 2014随iOS 8和OS X 10.10出来的,是为了解决UIWebView加载速度慢.占用内存大的问题.使用UIWebView加载网页的时候,我们会发现 ...

  6. Angular2中的host

    要将Angular组件渲染成DOM中的某种东西,你需要在Angular组件中结合一个DOM元素,我们称这些叫host元素. 一个组件可以用以下方式于其host DOM元素进行交互 它可以监听其事件. ...

  7. String类与Date类的转换

    public class DateTest { public static void main(String[] args) throws ParseException { Date date = n ...

  8. java I/O技术

    一.流的分类 Java的流类大部分都是由InputStream.OutputStream.Reader和Writer这四个抽象类派生出来的 (1)按数据流向 输入流(InputStream类和Read ...

  9. 04_过滤器Filter_03_多个Filter的执行顺序

    [Filter链] *在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称为一个Filter链. *web服务器根据Filter在web.xml中的注册顺序,决定先调用哪个Fi ...

  10. ASP.NET中的Request、Response、Server对象

    Request对象 Response.Write(Request.ApplicationPath) //应用根路径 Request.AppRelativeCurrentExecutionFilePat ...