JZOJ5465. 【NOIP2017提高A组冲刺11.9】道路重建
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】道路重建相关推荐
- JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
Description 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. Input 第一行一个整数t表示数据组数. 每组数据第一行一个整数n, ...
- jzoj_5455. 【NOIP2017提高A组冲刺11.6】拆网线
Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...
- [JZOJ5459]【NOIP2017提高A组冲刺11.7】密室
Description 小X 正困在一个密室里,他希望尽快逃出密室. 密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会 ...
- JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数
Description 小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小X 认为,质数是一切自然数起源的地方. 在小X 的认知里,质数是除了本身和1 以外,没有其他因数的数 ...
- JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线
Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...
- JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
Description 胆小鬼连幸福都会害怕,碰到棉花都会受伤,有时还被幸福所伤. --太宰治<人间失格> 回顾我的一生,一共有n个事件,每一个事件有一个幸福值p_i. 我想用n-1条线把 ...
- JZOJ5445. 【NOIP2017提高A组冲刺11.2】失格
Description 胆小鬼连幸福都会害怕,碰到棉花都会受伤,有时还被幸福所伤. --太宰治<人间失格> 回顾我的一生,一共有n个事件,每一个事件有一个幸福值p_i. 我想用n-1条线把 ...
- JZOJ 5466. 【NOIP2017提高A组冲刺11.9】玩游戏
Description 小A得了忧郁综合症,小B正在想办法开导她. 机智的小B决定陪着小A玩游戏,他从魔法的世界里变出一张无向联通图,每条边上都有边权.小B定义一条路径的权值为所有经过边中的最大权值, ...
- JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章
Description nodgd写了一篇文章,自认为这是一篇好文章.nodgd的文章由n个小写英文字母组成.文章的一个子串指的是文章中的一段连续的字母,子串的长度就是这一段的字母个数.nodgd在文 ...
- JZOJ 5463. 【NOIP2017提高A组冲刺11.8】证书
Description Pulumi生活在P城的角落,而他的朋友们gjdy,oyski,tutuwai等等生活在P城的靠中心位置. P城很大,但它拥有优秀的城市结构,同时P城重视文化教育的发展,P城共 ...
最新文章
- 【jQuery】用jQuery给文本框添加只读属性【readOnly】
- 下列哪个适合做链栈_很多朋友在问:多层实木生态板和颗粒板哪个更适合做衣柜呢?...
- FGPA异步信号问题
- Android 检查设备是否存在 导航栏 NavigationBar
- Gradle sync failed: Minimum supported Gradle version is 3.3.Current version is 3.2
- 快速实现Apache二级域名的方法
- 动态创建 @ViewChild 导致运行时错误的原因分析
- Java Object有哪些公用方法?
- 格密码教程(试读):向量空间,基等介绍
- 耗时1年的前端技术框架切换之旅
- 为什么使用3msip2协议_TCP协议专场
- Matlab网格划分
- git不能上传空目录和设备文件
- mib节点 snmp trap_snmp trap编写
- arch linux引导不启动_archlinux安装Steam启动不了
- realtek没有禁用前面板_为什么HD声卡必须禁用前面板插孔检测前置耳机和麦克才可以有声...
- 基于SSM的共享汽车管理系统设计与实现
- 安卓作业—Fragment界面跳转
- 笔记13-1(C语言 三子棋)
- 北京市工作居住证的申请与办理
热门文章
- 论文笔记4 --(ReID)Re-ranking Person Re-identification with k-reciprocal Encoding
- paint.net ps证件照背景色
- mysql 数据库内存不足_MySQL数据库内存不足怎么办 MySQL数据库使用教程
- 极客空间-MySQL实战45天-第三天
- 利用555定时器的双电源电路原理
- Springboot JPA日志输出打印SQL语句和传入的参数 高阶篇,java微服务架构视频下载
- aamp;m大学计算机科学,名校介绍丨美国 德克萨斯AM大学 Texas AM University
- 计算机云开头的词语,“云”字开头的成语大全
- 马里兰大学计算机水平,高三学生,二月收到马里兰大学以及普渡大学的计算机科学专业录取,是否值得为北大信科参加高考?...
- 做到这几点在家也能拍出好看的证件照