hdu 3394 Railway
这是一道用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的更多相关文章
- HDU 3394 Railway —— (点双联通,记录块信息)
这题是比较模板的找点双联通并记录的题目. 题意大概是:一个公园有n个景点,1.所有游客都是绕环旅游的,找出所有不在环内的路的条数:2.如果两个环中有重复的边,那么这些边是冲突的,问冲突的边的总数. 分 ...
- HDU 3394 双连通分量 桥 Railway
第一个答案是统计图中桥的个数 如果一个点-双连通分量中边的个数大于点的个数那么这个块中所有的边都是冲突的,累加到第二个答案中去. #include <iostream> #include ...
- hdu 3394(点双连通)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 思路:题目的意思是要求无向图中的冲突边和不需要边的条数,如果一个块中有多个环,则该块中的每条边都 ...
- Tarjan & LCA 套题题目题解
刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...
- 备战noip week8
POJ1144 网络 description: 给出一张\(N\)个点的无向图,求其中割点的个数 data range: \(N\le 100\) solution: 一道模板题(但是读入实在是把我恶 ...
- HDU3394 Railway —— 点双联通分量 + 桥(割边)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 Railway Time Limit: 2000/1000 MS (Java/Others) ...
- HDU3394:Railway
传送门 点双练习. 对于一张图,询问有多少条边不属于任意一个点双和多少条边至少属于两个点双. 显然,一张图里有多少个桥就是第一问的答案. 对于第二问,考虑对于一个点双,如果其中的边数等于点数,那么这个 ...
- NOIP 考前 Tarjan复习
POJ 1236 给定一个有向图,求: 1) 至少要选几个顶点,才能做到从这些顶点出发,可以到达全部顶点 2) 至少要加多少条边,才能使得从任何一个顶点出发,都能到达全部顶点 第一个就是缩点之后有多少 ...
- Tarjan LCA
强连通 迷宫城堡 Proving Equivalences Equivalent Sets Summer Holiday Intelligence System The King's Problem ...
随机推荐
- Java基础知识强化之IO流笔记42:IO流总结(图解)
1. IO流总结(图解)
- 集合练习——Set部分
我们知道list存储的是有序不唯一的元素. set存储的是无序唯一的元素. 那么下面看一个例子吧: package CollectionPart; import java.util.HashSet; ...
- 集合练习——List部分
利用ArrayList 1.存储多个员工信息,包括工号,姓名,年龄,入职时间,逐条打印所有员工姓名,并输出员工个数. package CollectionPart; import java.util. ...
- 移动端 touch 实现 拖动元素
var homeMove = (function () { //touch自适应 var k = "ontouchend" in window ? "touchend&q ...
- NChome如何创建单据跟主子表还有扩展开发要怎么弄?
单据表跟主子表笔记做在笔记本里面 扩展开发在网络备份里面
- Servlet & JSP - Decorating Requests and Responses
Servlet API 提供了四个包装类:ServletRequestWrapper.ServletResponseWrapper.HttpServletRequestWrapper.HttpServ ...
- 20151225jquery学习笔记---编辑器插件
编辑器(Editor),一般用于类似于 word 一样的文本编辑器,只不过是编辑为 HTML格式的.分类纯 JS 类型的,还有 jQuery 插件类型的.一. 编辑器简介我们使用的 jQuery 版本 ...
- 保留关键字 (Transact-SQL)
https://msdn.microsoft.com/zh-cn/library/ms189822(v=sql.120).aspx Microsoft SQL Server 将保留关键字用于定义.操作 ...
- C10K问题和Libevent库介绍
http://blog.chinaunix.net/uid-20761674-id-75056.html 一.C10K的问题 C10K的问题在上个世纪90年代就被提出来了.大概的意思是当用户数超过1万 ...
- spring mvc源码解析
1.从DispatcherServlet开始 与很多使用广泛的MVC框架一样,SpringMVC使用的是FrontController模式,所有的设计都围绕DispatcherServlet 为中心来 ...