题解 CF1000E 【We Need More Bosses】
这道题绝不是紫题。。。
题目的意思其实是让你求一个无向无重边图的直径。
对于求直径的问题我们以前研究过树的直径,可以两遍dfs或者两边bfs解决。
对于图显然不能这样解决,因为图上两点之间的简单路径不唯一。
那怎么解决这个问题呢?
能不能把环都搞掉呢?
于是乎,我们想到了强连通分量。
因此先用tarjan缩一下点,重新建图跑一个直径就可以解决这个问题了。
AC代码如下:
3053ms 23816kb
#include<bits/stdc++.h> using namespace std; namespace StandardIO { template<typename T>inline void read (T &x) {
x=;T f=;char c=getchar();
for (; c<''||c>''; c=getchar()) if (c=='-') f=-;
for (; c>=''&&c<=''; c=getchar()) x=x*+c-'';
x*=f;
} template<typename T>inline void write (T x) {
if (x<) putchar('-'),x*=-;
if (x>=) write(x/);
putchar(x%+'');
} } using namespace StandardIO; namespace Solve { const int N=; int n,m,bcnt,index;
vector<int>graph[N],new_graph[N];
int low[N],dfn[N],belong[N],instack[N],dis[N];
stack<int>st; inline void tarjan (int now,int father) {
low[now]=dfn[now]=++index;
st.push(now),instack[now]=;
for (register int i=; i<graph[now].size(); ++i) {
int to=graph[now][i];
if (to==father) continue;
if (!dfn[to]) {
tarjan(to,now);
low[now]=min(low[now],low[to]);
} else if (instack[to]) {
low[now]=min(low[now],dfn[to]);
}
}
if (low[now]==dfn[now]) {
int v=-;++bcnt;
while(v!=now){
v=st.top(),st.pop();
instack[v]=,belong[v]=bcnt;
}
}
} inline void dfs (int now,int fa) {
dis[now]=dis[fa]+;
for (register int i=; i<new_graph[now].size(); ++i) {
int to=new_graph[now][i];
if (to!=fa) dfs(to,now);
}
} inline int diameter () {
dfs(,);
int fur=;
for (register int i=; i<=bcnt; ++i) {
if (dis[i]>dis[fur]) fur=i;
}
dfs(fur,);
int ans=;
for (register int i=; i<=bcnt; ++i) {
ans=max(ans,dis[i]);
}
return ans-;
} inline void solve () {
read(n),read(m);
for (register int i=; i<=m; ++i) {
int x,y;
read(x),read(y);
graph[x].push_back(y);
graph[y].push_back(x);
}
for (register int i=; i<=n; ++i) {
if (!dfn[i]) tarjan(i,);
}
for (register int i=; i<=n; ++i) {
for (register int j=; j<graph[i].size(); ++j) {
int to=graph[i][j];
if (belong[i]!=belong[to]) {
new_graph[belong[i]].push_back(belong[to]);
}
}
}
write(diameter());
}
} using namespace Solve; int main () {
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
solve();
}
题解 CF1000E 【We Need More Bosses】的更多相关文章
- [CF1000E]We Need More Bosses
题目大意:给一张无向图,要求找一对$s$和$t$,使得其路径上的割边是最多的,输出其数量. 题解:把边双缩点以后求树的直径. 卡点:无 C++ Code: #include <cstdio> ...
- cf1000E We Need More Bosses (tarjan缩点+树的直径)
题意:无向联通图,求一条最长的路径,路径长度定义为u到v必须经过的边的个数 如果把强联通分量都缩成一个点以后,每个点内部的边都是可替代的:而又因为这是个无向图,缩完点以后就是棵树,跑两遍dfs求直径即 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
随机推荐
- 为什么同样的数据,俩人生成的obj和bin文件不一样
http://bbs.csdn.net/topics/270055083 编译器编译的时候可能有些东西依赖时间,或许是优化的原因,如果可以,换个编译器试试,或许两次编译的时候,强制把系统时间调成一个看 ...
- hdu 1257/1800 - 贪心,dp
1257题目链接 一个序列划分子序列,每个子序列都是非增序列,问最少分成几个子序列 1800题目链接 一堆数分组,每组内数据严格递减,问最少分几组 -------------------------- ...
- HDU 1233 还是畅通工程【最小生成树】
解题思路:kruskal算法:贪心选取最短的边构成一棵最小的生成树 共n个点,即先将所有的边排序,然后利用并查集判断,如果两点连通,则不加入树,不连通,则加入树,直到加入了n-1条边,构成生成树. 反 ...
- RocketMQ学习笔记(3)----RocketMQ物理结构和逻辑部署结构
1. RocketMQ的物理结构 RecketMQ网络部署的特点: Name Server是一个几乎无状态特点,可集群部署,节点之间无任何信息同步的(相对于zookeeper是较为轻量级的). Bro ...
- 获取鼠标经过处的标签的标签名和id
<script> var el = window.document.body; // 声明一个变量,默认值为body window.document.body.onmouseover = ...
- POJ 1975 Median Weight Bead
Median Weight Bead Time Limit: 1000ms Memory Limit: 30000KB This problem will be judged on PKU. Orig ...
- 【转】C# 正则表达式大全
[转]C# 正则表达式大全 前言 在网上看到一个不错的简易版正则匹配和替换的工具,现在补充进来,感觉还不错,效果如下(输入验证中文汉字的正则表达式) 在线下载 密码:5tpt 注:好像也是一位园友 ...
- 微信开发出现 redirect-uri參数错误原因是设置回调页面域名不要加HTTP://
OAuth2.0 网页授权设置.回调页面域名不要加HTTP:// NND 微信的研发.你程序处理下非常麻烦吗?给个提示非常麻烦吗?让我查了1个多小时.
- LightOJ - 1132 Summing up Powers 矩阵高速幂
题目大意:求(1^K + 2^K + 3K + - + N^K) % 2^32 解题思路: 借用别人的图 能够先打表,求出Cnm,用杨辉三角能够高速得到 #include<cstdio> ...
- cocos2d-x 粒子效果
大规模运动的物体通常有两种方法实现 1.使用帧动画来模拟 2,粒子效果 粒子系统有CCParticleSystem类实现,CCParticleSystem实现了对粒子的控制与调度,对粒子的操作包含: ...