[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). ...
随机推荐
- Eclipse一些技巧
1:测试某个测试溢出,修改堆内存大小 // 模拟内存溢出 -Xms10m -Xmx10m private static void mockOOM() { List list = new ArrayLi ...
- JVM 介绍
JVM 介绍: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 ...
- (一)Maven基础及第一个Maven工程
一.Maven介绍 ANT/Maven/gradle是一个项目管理工具,它包含了一项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecy ...
- oracle查询十分钟之前的数据
select * from TABLE as of timestamp sysdate - 10/1440 t WHERE ColName='1111'; TABLE:表名 WHERE:查询子句 sy ...
- asp.net类似于js中的setTimeOut()的函数作用?
asp.net类似于js中的setTimeOut()的函数作用? 插入这行即可,定时2秒,再运行下一步: System.Threading.Thread.Sleep(); 加个随机数 Random r ...
- js对象 c#对象转换
前台页面 js 创建对象 let t = {}; 数组对象 let c = []; c.push({}) ;// 添加对象 以string格式 传递 JSON JSON.stringify(c); c ...
- SOAP-1概述
简单对象访问协议 SOAP(简单对象访问协议)一般指简单对象访问协议 简单对象访问协议是交换数据的一种协议规范,是一种轻量的.简单的.基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WE ...
- django 2.0 xadmin 错误集锦
转载 django 2.0 xadmin 错误集锦 2018-03-26 10:39:18 Snail0Li 阅读数 5188更多 分类专栏: python 1.django2.0把from dj ...
- vue cli3 打包到tomcat上报错问题
首先 项目打包步骤 1.vue config.js 添加 publicPath: './', // 公共路径 assetsDir:'static', 2.将代理注释掉 proxy 3.将hash需 ...
- dubbo框架梳理
Dubbo分层 Dubbo框架运行主要分如下九层: 配置层:config 服务代理层:proxy 注册中心层:registry 路由层:cluster 监控层:monitor 远程调用层:protoc ...