Description

小X所居住的X国共有n个城市,有m条无向道路将其连接。作为一个统一的国家,X 城的任意两个城市都可以相互到达。
由于X国正处于地震带上,有时X国中会有至多一条道路发生毁坏,无法使用。如果这条道路的毁坏恰好阻断了某些城市的往来,那么我们称这条道路是危险的。
人们并不喜欢危险的道路,于是人们决定重建恰好一条道路,以减少危险的道路数。请告诉人们,重建恰好一条道路后,危险的道路数最少是多少。

Input

输入文件包含多组数据,对于每一组数据,第一行两个整数n,m,表示X 国的城市数与道路数。
接下来m 行,每行两个整数x,y,描述一条道路。
输入文件以n = 0,m = 0 结尾。
保证输入的图是一张连通图,但不保证不存在重边与自环。

Output

对于每一组数据,输出一行一个整数,表示危险的道路数的最小值。

Sample Input

5 6
1 2
2 1
1 3
2 4
4 4
5 2
0 0

Sample Output

1
样例解释:
一种最优的重建方式是连接城市3,5,这样,只有道路(2,4)是危险的。

数据范围

题解

先看看哪一些边是安全的,
就是说它被删掉之后,并不会影响连通性,
也就是环里面的边。

既然是环,就先tarjan缩点。
这样图就变成了树,
用贪心的思想,
如何加一条边,构成树中最大的环,
找直径。

code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define ll long long
#define N 200003
using namespace std;char ch;
void read(int& n)
{n=0;for(ch=getchar();ch<'0' || ch>'9';ch=getchar());for(;'0'<=ch && ch<='9';n=(n<<3)+(n<<1)+ch-48,ch=getchar());
}struct node
{int x,y;
}a[N*5];int n,m,x,y,nxt[N*10],b[N],to[N*10],tot;
int dfn[N],low[N],z[N],f[N],cnt,top,id;
int nxt1[10*N],b1[N],to1[10*N];
int mx,pos;
bool bz[N],w[N];int min(int x,int y){return x<y?x:y;}
int max(int x,int y){return x>y?x:y;}void ins(int x,int y)
{nxt[++tot]=b[x];to[tot]=y;b[x]=tot;
}void ins1(int x,int y)
{nxt1[++tot]=b1[x];to1[tot]=y;b1[x]=tot;
}void dfs(int x,int len)
{bz[x]=0;if(len>mx)mx=len,pos=x;for(int i=b1[x];i;i=nxt1[i])if(bz[to1[i]])dfs(to1[i],len+1);
}void tarjan(int x,int fa)
{dfn[x]=low[x]=++id;bz[x]=0;w[x]=1;z[++top]=x;for(int i=b[x];i;i=nxt[i]){if(i==(fa^1))continue;if(bz[to[i]]){tarjan(to[i],i);low[x]=min(low[x],low[to[i]]);}else if(w[x])low[x]=min(low[x],dfn[to[i]]);}if(low[x]==dfn[x]){z[top+1]=-1;cnt++;while(z[top+1]!=x){f[z[top]]=cnt;w[z[top]]=0;top--;}}
}bool cmp(node a,node b)
{return a.x<b.x || (a.x==b.x && a.y<b.y);
}int main()
{freopen("rebuild.in","r",stdin);freopen("rebuild.out","w",stdout);read(n);read(m);while(n!=0 && m!=0){tot=1;memset(b,0,sizeof(b));for(int i=1;i<=m;i++)read(x),read(y),ins(x,y),ins(y,x);memset(bz,1,sizeof(bz));memset(w,0,sizeof(w));id=cnt=top=0;tarjan(1,0);tot=0;memset(b1,0,sizeof(b1));for(int i=1;i<=n;i++)for(int j=b[i];j;j=nxt[j])if(f[i]!=f[to[j]])ins1(f[i],f[to[j]]);mx=0;memset(bz,1,sizeof(bz));dfs(1,0);mx=0;memset(bz,1,sizeof(bz));dfs(pos,0);printf("%d\n",cnt-mx-1);read(n);read(m);}return 0;
}

JZOJ5465. 【NOIP2017提高A组冲刺11.9】道路重建相关推荐

  1. JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列

    Description 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. Input 第一行一个整数t表示数据组数. 每组数据第一行一个整数n, ...

  2. jzoj_5455. 【NOIP2017提高A组冲刺11.6】拆网线

    Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...

  3. [JZOJ5459]【NOIP2017提高A组冲刺11.7】密室

    Description 小X 正困在一个密室里,他希望尽快逃出密室. 密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会 ...

  4. JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数

    Description 小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小X 认为,质数是一切自然数起源的地方. 在小X 的认知里,质数是除了本身和1 以外,没有其他因数的数 ...

  5. JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线

    Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...

  6. JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格

    Description 胆小鬼连幸福都会害怕,碰到棉花都会受伤,有时还被幸福所伤. --太宰治<人间失格> 回顾我的一生,一共有n个事件,每一个事件有一个幸福值p_i. 我想用n-1条线把 ...

  7. JZOJ5445. 【NOIP2017提高A组冲刺11.2】失格

    Description 胆小鬼连幸福都会害怕,碰到棉花都会受伤,有时还被幸福所伤. --太宰治<人间失格> 回顾我的一生,一共有n个事件,每一个事件有一个幸福值p_i. 我想用n-1条线把 ...

  8. JZOJ 5466. 【NOIP2017提高A组冲刺11.9】玩游戏

    Description 小A得了忧郁综合症,小B正在想办法开导她. 机智的小B决定陪着小A玩游戏,他从魔法的世界里变出一张无向联通图,每条边上都有边权.小B定义一条路径的权值为所有经过边中的最大权值, ...

  9. JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章

    Description nodgd写了一篇文章,自认为这是一篇好文章.nodgd的文章由n个小写英文字母组成.文章的一个子串指的是文章中的一段连续的字母,子串的长度就是这一段的字母个数.nodgd在文 ...

  10. JZOJ 5463. 【NOIP2017提高A组冲刺11.8】证书

    Description Pulumi生活在P城的角落,而他的朋友们gjdy,oyski,tutuwai等等生活在P城的靠中心位置. P城很大,但它拥有优秀的城市结构,同时P城重视文化教育的发展,P城共 ...

最新文章

  1. 【jQuery】用jQuery给文本框添加只读属性【readOnly】
  2. 下列哪个适合做链栈_很多朋友在问:多层实木生态板和颗粒板哪个更适合做衣柜呢?...
  3. FGPA异步信号问题
  4. Android 检查设备是否存在 导航栏 NavigationBar
  5. Gradle sync failed: Minimum supported Gradle version is 3.3.Current version is 3.2
  6. 快速实现Apache二级域名的方法
  7. 动态创建 @ViewChild 导致运行时错误的原因分析
  8. Java Object有哪些公用方法?
  9. 格密码教程(试读):向量空间,基等介绍
  10. 耗时1年的前端技术框架切换之旅
  11. 为什么使用3msip2协议_TCP协议专场
  12. Matlab网格划分
  13. git不能上传空目录和设备文件
  14. mib节点 snmp trap_snmp trap编写
  15. arch linux引导不启动_archlinux安装Steam启动不了
  16. realtek没有禁用前面板_为什么HD声卡必须禁用前面板插孔检测前置耳机和麦克才可以有声...
  17. 基于SSM的共享汽车管理系统设计与实现
  18. 安卓作业—Fragment界面跳转
  19. 笔记13-1(C语言 三子棋)
  20. 北京市工作居住证的申请与办理

热门文章

  1. 论文笔记4 --(ReID)Re-ranking Person Re-identification with k-reciprocal Encoding
  2. paint.net ps证件照背景色
  3. mysql 数据库内存不足_MySQL数据库内存不足怎么办 MySQL数据库使用教程
  4. 极客空间-MySQL实战45天-第三天
  5. 利用555定时器的双电源电路原理
  6. Springboot JPA日志输出打印SQL语句和传入的参数 高阶篇,java微服务架构视频下载
  7. aamp;m大学计算机科学,名校介绍丨美国 德克萨斯AM大学 Texas AM University
  8. 计算机云开头的词语,“云”字开头的成语大全
  9. 马里兰大学计算机水平,高三学生,二月收到马里兰大学以及普渡大学的计算机科学专业录取,是否值得为北大信科参加高考?...
  10. 做到这几点在家也能拍出好看的证件照