【题目描述】

有一个公园有n个景点,公园的管理员准备修建m条道路,并且安排一些形成回路的参观路线。如果一条道路被多条道路公用,那么这条路是冲突的;如果一条道路没在任何一个回路内,那么这条路是不冲突的

问分别有多少条有冲突的路和没有冲突的路

题解

这是一道点双联通的题,首先把图缩成块,显然如果块中边的数量大于点的数量,那么块中所有的边都是冲突的。

对于没有冲突的边,其实就是桥,tarjan的时候顺便求一下就行了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<algorithm>
using namespace std;
#define MAXN 10010
struct node{int y,next;}e[];
int n,m,ans1,ans2,len,top,dfs_clock,bcnt,belong[MAXN],Link[MAXN],dfn[MAXN],low[MAXN],stack[MAXN],vis[MAXN];
inline int read()
{
int x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
void insert(int x,int y) {e[++len].next=Link[x];Link[x]=len;e[len].y=y;}
void pre()
{
ans1=ans2=len=top=dfs_clock=;
memset(Link,,sizeof(Link));
memset(dfn,,sizeof(dfn));
}
void count()
{
int sum=;
for(int i=;i<=bcnt;i++)
{
int x=belong[i];
for(int j=Link[x];j;j=e[j].next)
if(vis[e[j].y]) sum++;
}
sum/=;
if(sum>bcnt) ans2+=sum;
}
void tarjan(int x,int father)
{
dfn[x]=low[x]=++dfs_clock;
stack[++top]=x;
for(int i=Link[x];i;i=e[i].next)
{
if(e[i].y==father) continue;
if(!dfn[e[i].y])
{
tarjan(e[i].y,x);
low[x]=min(low[x],low[e[i].y]);
if(low[e[i].y]>dfn[x]) ans1++;
if(low[e[i].y]>=dfn[x])
{
int y; bcnt=;
memset(vis,,sizeof(vis));
do
{
y=stack[top--];
vis[y]=;
belong[++bcnt]=y;
}while(e[i].y!=y);
belong[++bcnt]=x;
vis[x]=;
count();
}
}
else low[x]=min(low[x],dfn[e[i].y]);
}
}
void solve()
{
for(int i=;i<n;i++) if(!dfn[i]) tarjan(i,-);
printf("%d %d\n",ans1,ans2);
}
int main()
{
//freopen("cin.in","r",stdin);
//freopen("cout.out","w",stdout);
while(scanf("%d%d",&n,&m)==)
{
if(n==&&m==) break;
pre();
for(int i=;i<=m;i++) {int x=read(),y=read(); insert(x,y); insert(y,x);}
solve();
}
return ;
}

【HDU3394】Railway的更多相关文章

  1. 【题解】Railway [Uva10263]

    [题解]Railway [Uva10263] 传送门:\(\text{Railway [Uva10263]}\) [题目描述] 给出点 \(M\) 以及一个由 \(n\) 条线段依次相连的类曲形图(由 ...

  2. 【poj2828】Buy Tickets 线段树 插队问题

    [poj2828]Buy Tickets Description Railway tickets were difficult to buy around the Lunar New Year in ...

  3. 【POJ2774】Long Long Message (后缀数组)

    Long Long Message Description The little cat is majoring in physics in the capital of Byterland. A p ...

  4. 【cogs247】售票系统【线段树】

    售票系统 输入文件:railway.in 输出文件:railway.out 时间限制:1 s 内存限制:128 MB [问题描述] 某次列车途经C个城市,城市编号依次为1到C,列车上共有S个座位,铁路 ...

  5. 【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜

    实验网站:虾米音乐排行榜 网站地址:http://www.xiami.com/chart  难度系数:★☆☆☆☆ 依赖库:request.lxml的etree (安装lxml:pip install ...

  6. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  7. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  8. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  9. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

随机推荐

  1. ROS新版本Lunar Loggerhead

    参考链接: 1 http://wiki.ros.org/lunar 2 http://wiki.ros.org/lunar/Installation 3 http://docs.ros.org/ 4  ...

  2. Android 仿淘宝属性标签页

    直接看效果图相信这样的效果很多,我之前在网上找了很久没找到自己想要的! <?xml version="1.0" encoding="utf-8"?> ...

  3. HAWQ取代传统数仓实践(七)——维度表技术之维度子集

    有些需求不需要最细节的数据.例如更想要某个月的销售汇总,而不是某天的数据.再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等.此时事实数据需要关联到特定的维度,这些特定维度包含在从细节维度 ...

  4. 我们为什么选择JAVA

    我们为什么选择Java 大多数人选择Java可能只是因为听说Java前景好.Java比较好找工作.Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里,心里却是没有什么 ...

  5. php 中的杂项函数

    1.$arr = range(1, 10);   print_r($arr); Array(    [0] => 1    [1] => 2    [2] => 3    [3] = ...

  6. rest_framework使用完之后的简单总结

    首先先大致概括一下使用流程,因为还不是对这个框架很熟悉(其实有很多知识可以对比formModel的) 其实还是遵循django的MTV的模式,还是得从url开始 1.rest_framework有一个 ...

  7. Python函数- setattr()

    作用: setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在. 语法: setattr(object, name, value) object -- 对象. name -- ...

  8. 找到最大或最小的N个元素

    问题: 想在某个集合中找到最大或最小的N个元素 解决方案: heapq 模块中有两个函数  nlargest() 和 nsmallest()  它们正是我们需要的.例如: import heapq n ...

  9. 使用Inno SetUp脚本打包Winform程序

    在开发桌面程序时,往往需要用到打包工具将程序打包为exe可执行文件. 之前在项目中用了下 InstallShield Limited Edition for Visual Studio  2015,它 ...

  10. 在Linux 64位系统下使用hugepage

    首先,为什么要介绍/使用HugePage? 在步入正题之前,先讲一个非常普遍的数据库性能问题. 众所周知,Oracle数据库使用共享内存(SGA)来管理可以共享的一些资源;比如shared pool中 ...