这是一道用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. 使用摘要流获取文件的MD5

    摘要流是过滤流的一种,使用它可以再读取和写入流时获取流的摘要信息(MD5/SHA). 使用摘要流包装流时,需要额外传递一个MessageDigest对象, MessageDigest md=Messa ...

  2. Python中如何写控制台进度条的整理

    本文实例讲述了Python显示进度条的方法,是Python程序设计中非常实用的技巧.分享给大家供大家参考.具体方法如下: 首先,进度条和一般的print区别在哪里呢? 答案就是print会输出一个\n ...

  3. RPC框架之Thrift

    目前流行的服务调用方式有很多种,例如基于SOAP消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其中所用到的数据传输方式包括 XML,JSON 等,然而 XML ...

  4. "make_path" is not exported by the File::Path modul

    之前正常运行的perl脚本换了一个环境突然报 从原来的make_path 和 remove_tree改为现在的mkpath 和 rmtree就好了. File::Path version is 1.0 ...

  5. 理解C#中的继承

    继承 1.创建子类对象的时候,在子类对象中会为子类对象的字段开辟空间,也会为父类对象的所有字段开辟空间.只不过父类私有的成员访问不到而已. 2.base关键字可以调用父类的非私有成员. 3.子类的访问 ...

  6. Jquery CheckBox复选框 全选/取消全选 最佳实现方式 参考案例

    <input id="chkAll" type="checkbox" />全选/取消全选</div> <asp:Repeater ...

  7. html_table标签和from表单标签小试手

    Html Body中table(表格)也是一个重要组成部分,下面列举一个简单的实例: ——————————————简单的table—————————————————— <!DOCTYPE HTM ...

  8. 两款web api 调试工具

    两款web api 调试工具: Fiddler (http://www.telerik.com/fiddler) Postman(http://www.getpostman.com/) 资源: Fid ...

  9. UDP协议疑难杂症全景解析

    转载:http://blog.csdn.net/dog250/article/details/6896949 UDP协议疑难杂症全景解析 2011-10-22 19:26 2989人阅读 评论(4)  ...

  10. STL unique使用问题

    string strs[] = {"one","one","two","three","three" ...