【题目描述】

有一个公园有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 ;
}

最新文章

  1. CF576E
  2. php调用COM组件
  3. 【BZOJ】3542: DZY Loves March
  4. XproerUI控件工厂代码优化-使用C++11特性优化
  5. XML操作类
  6. Piggy-Bank[HDU1114]
  7. BZOJ 1415 聪聪和可可
  8. SharePoint中修改密码的WEB Part之终极版:即可以修改AD,又可以修改本机用户密码的Web Part!!
  9. Python:urllib和urllib2的区别(转)
  10. C++程序设计实践指导1.2二维数组的操作运算改写要求实现
  11. arm-linux-gcc下载与安装
  12. FreeRTOS--疑难解答
  13. 【Sql Server】SQL SERVER 收缩日志
  14. bootstrap表格鼠标悬停与状态类
  15. Node.js 初识2
  16. 【洛谷P3600】 随机数生成器
  17. 微软官方的.net开发人员代码示例
  18. IntelIJ IDEA配置Tomcat遇到问题Error during artifact deployment. See server log for details
  19. 查询EBS系统在线人数
  20. Linux command line exercises for NGS data processing

热门文章

  1. HAWQ取代传统数仓实践(十八)——层次维度
  2. Mac上安装Jenkins持续部署初体验
  3. go set up on ubuntu
  4. (一)java概述
  5. linux 系统统计目录下文件夹的大小
  6. win7下破解无线网密码
  7. 如何加快MyEclipse的启动速度
  8. Hibernate中 一 二级缓存及查询缓存(2)
  9. 关于quartus工程添加文件的说明
  10. 十九、python沉淀之路--装饰器