[DK] 化学竞赛的大奖
https://www.luogu.org/problemnew/show/T16502
无向图 缩点 树的直径 到直径两个端点的距离的较大值
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring> using namespace std;
const int N = 2e5 + ; #define yxy getchar() int n, m, now = , now_2 = , Tarjan_tim, Top, Bel_tim, Root, Max_d;
int head[N], head_2[N], Stack[N], Dfn[N], Low[N], Bel[N], dis[N], dist[N];
bool vis[N];
struct Node {int u, v, w, nxt;} E[N << ];
struct Node_2 {int u, v, w, nxt;} G[N << ]; inline int read(){
int x = ; char c = yxy;
while(c < '' || c > '') c = yxy;
while(c >= '' && c <= '') x = x * + c - '', c = yxy;
return x;
} void add_E(int u, int v, int w){
E[now].v = v; E[now].w = w; E[now].nxt = head[u]; head[u] = now ++;
} void Tarjan(int u, int fa){
Dfn[u] = Low[u] = ++ Tarjan_tim;
vis[u] = ;
Stack[++ Top] = u;
for(int i = head[u]; ~ i; i = E[i].nxt) {
int v = E[i].v;
if(!Dfn[v]){
Tarjan(v, u);
Low[u] = min(Low[u], Low[v]);
}
else if(vis[v] && v != fa) Low[u] = min(Low[u], Low[v]);
}
if(Dfn[u] == Low[u]){
++ Bel_tim;
Bel[u] = Bel_tim; vis[u] = ;
while(Stack[Top] != u){
Bel[Stack[Top]] = Bel_tim;
vis[Stack[Top]] = ;
Top --;
} Top --;
}
} void add_G(int u, int v, int w){
G[now_2].v = v; G[now_2].w = w; G[now_2].nxt = head_2[u]; head_2[u] = now_2 ++;
} void Build_G(){
for(int i = ; i <= n; i ++) head_2[i] = -;
for(int u = ; u <= n; u ++)
for(int i = head[u]; ~ i; i = E[i].nxt)
if(Bel[u] != Bel[E[i].v])
add_G(Bel[u], Bel[E[i].v], E[i].w);
} void dfs_first(int u, int fa){
for(int i = head_2[u]; ~ i; i = G[i].nxt){
int v = G[i].v;
if(v == fa) continue ;
dis[v] = dis[u] + G[i].w;
if(dis[v] > Max_d) Max_d = dis[v], Root = v;
dfs_first(v, u);
}
} void dfs_second(int u, int fa){
for(int i = head_2[u]; ~ i; i = G[i].nxt){
int v = G[i].v;
if(v == fa) continue ;
dist[v] = dist[u] + G[i].w;
dfs_second(v, u);
}
} void Get_Answer(){
dfs_first(, -);
memset(dis, , sizeof dis);
Max_d = ;
dfs_first(Root, -);
Max_d = ;
dfs_second(Root, -);
for(int i = ; i <= n; i ++) printf("%d\n", max(dis[Bel[i]], dist[Bel[i]]));
} int main()
{
n = read(); m = read();
for(int i = ; i <= n; i ++) head[i] = -;
for(int i = ; i <= m; i ++){
int u = read(), v = read(), w = read();
add_E(u, v, w); add_E(v, u, w);
}
for(int i = ; i <= n; i ++) if(!Dfn[i]) Tarjan(i, );
Build_G();
Get_Answer();
return ;
}
[DK] 化学竞赛的大奖的更多相关文章
- 2017-11-7 NOIP模拟赛
1.数学老师的报复 #include<iostream> #include<cstdio> using namespace std; int cnt; ]; long long ...
- 2017-11-07-noip模拟题
T1 数学老师的报复 矩阵快速幂模板,类似于菲波那切数列的矩阵 [1,1]*[A,1 B,0] #include <cstdio> #define LL long long inline ...
- 关于ACM,关于CSU
原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...
- luogu P2580 于是他错误的点名开始了
luogu P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...
- 1011: [HNOI2008]遥远的行星
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 2241 Solved ...
- [2017BUAA软工]第0次个人作业
第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 我觉得我选择计算机系完全是误打误撞吧.当时我的分数上北航是没问题的,所以填专业时就是机械,电气,自动化,计算机等 ...
- may be a diary?
[About Me] SD某弱校高二的OIer. qq 995681518,欢迎一起交流~ 喵喵喵喵喵 "当你想要颓废的那一刻,想一想当初为什么走到了这里." 以下文字充满负面情绪 ...
- P2580 于是他错误的点名开始了
题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...
- 于是他错误的点名开始了(trie树)
题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...
随机推荐
- golang以服务方式运行
golang开发的二进制程序,一般需要长期后台运行的,在linux上可以用supervisor或upstart或systemd等第三方守护进程来实现.其实golang自己也可以实现以服务的形式常驻后台 ...
- CI/CD/Jenkins
Continuous Integration, Continuous Delivery & Deployment (CI/CD) 持续集成.持续部署&持续交付. Jenkins就是一个 ...
- 【转载】springboot启动报错(Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWe)
SpringBoot启动时的异常信息如下: 1 "C:\Program Files\Java\jdk1.8.0_161\bin\java" ......... com.fangxi ...
- 运维MES的日子里
可以看下<工业软件国内与国外差距,越来越小还是越来越大>.<MES技术国内现状与未来发展趋势>及<国际主要MES厂商>,总结来说中国工业是进步的,工业软件也是进步的 ...
- .NetCore如何使用ImageSharp进行图片的生成
ImageSharp是对NetCore平台扩展的一个图像处理方案,以往网上的案例多以生成文字及画出简单图形.验证码等方式进行探讨和实践. 今天我分享一下所在公司项目的实际应用案例,导出微信二维码图片, ...
- 转:让PIP源使用国内镜像,提升下载速度和安装成功率
转载,自己记录使用,原文http://www.cnblogs.com/microman/p/6107879.html 对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太 ...
- Unity使用Resources读取Resources路径下的二进制文件(Binary Data)必须使用 .bytes扩展名
将某二进制文件放在Resources目录下,希望用Resources.Load<TextAsset>的方式读取,发现TextAsset是null 查阅Unity文档得知,使用Resourc ...
- 关于微信小程序使用watch监听数据变化的方法
众所周知,Vue中,可以使用监听属性 watch来观察和响应 Vue 实例上的数据变化,那么小程序能不能实现这一点呢? 监听器的原理,是将data中需监听的数据写在watch对象中,并给其提供一个方法 ...
- Element-ui-Basic
一.Layout 布局 1.基础布局 <el-row> <el-col :span="24"><div class="grid-conten ...
- epoll、mysql概念及简单操作
epoll 程序阻塞的过程 假设我们目前运行了三个进程A B C ,如果他们都在处于运行态,那就会被加到一个运行队列中 进程A正在运行socket程序 在linux中有句话,万物皆文件,socket对 ...