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] 化学竞赛的大奖的更多相关文章

  1. 2017-11-7 NOIP模拟赛

    1.数学老师的报复 #include<iostream> #include<cstdio> using namespace std; int cnt; ]; long long ...

  2. 2017-11-07-noip模拟题

    T1 数学老师的报复 矩阵快速幂模板,类似于菲波那切数列的矩阵 [1,1]*[A,1 B,0] #include <cstdio> #define LL long long inline ...

  3. 关于ACM,关于CSU

    原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...

  4. luogu P2580 于是他错误的点名开始了

    luogu  P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...

  5. 1011: [HNOI2008]遥远的行星

    1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 2241  Solved ...

  6. [2017BUAA软工]第0次个人作业

    第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 我觉得我选择计算机系完全是误打误撞吧.当时我的分数上北航是没问题的,所以填专业时就是机械,电气,自动化,计算机等 ...

  7. may be a diary?

    [About Me] SD某弱校高二的OIer. qq 995681518,欢迎一起交流~ 喵喵喵喵喵 "当你想要颓废的那一刻,想一想当初为什么走到了这里." 以下文字充满负面情绪 ...

  8. P2580 于是他错误的点名开始了

    题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...

  9. 于是他错误的点名开始了(trie树)

    题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...

随机推荐

  1. 使用内存地址点亮LED—跟51单片机一样写代码教学(初步入门)

    51单片机点亮一个小灯 #include <rge52.h> sbit LED = P0^ void main(void) { P0 = 0XFE; // 总线操作 sfr P0 0X80 ...

  2. Redis键的基本操作

    1.Redis键的键名查询 ·命令名称:KEYS ·语法:KEYS pattern ·Pattern的用法: ? 任意一个字符 * 任意个任意字符 [ae] a或者e [^ae] 除了a和e [a-c ...

  3. Manacher算法+注释

    Manacher算法是用来求一个字符串中最长回文串的算法. 考虑暴力求最长回文串的做法: 暴力枚举字符串中的所有字串判断是否回文,然后求最大值. 时间复杂度O(n^3),考虑优化. 我们从枚举所有字串 ...

  4. ZROI17普及23-A.如烟题解--技巧枚举

    题目链接 因版权原因不予提供 分析 别看这是普及模拟赛,其实基本上是提高难度...像这题做NOIpT1的话也说的过去 有个很显然的暴力思路就是枚举c,a,b,时间复杂度\(O(N^3)\), 然后正解 ...

  5. 学习笔记-Rabin-Karp哈希

    在数学一本通上看过这两人名字,现在又出现了... 思想: 用一个整数表示一个字符串 \(w_{str}\)=(\(a_0\) \(p^{n-1}\)+\(a_1\) \(p^{n-2}\)+...+\ ...

  6. 基于【 centos7】三 || 分布式文件系统FastDFS+Nginx环境搭建

    1. FastDFS介绍 1.1 FastDFS定义 FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用 ...

  7. nodejs入门API之path模块

    Path模块在各个系统上的差异 Path模块API解析 一.Path模块在各个系统上的差异 path模块提供用于处理文件路径和目录路径的使用工具. let path = require('path') ...

  8. json其实就是一种数据格式

    1.json的两种书写: 2.字符串转换为json格式:

  9. python matplotlib以日期为x轴作图

    from datetime import datetime, date, timedelta import matplotlib.pyplot as plt import tushare as ts ...

  10. macro 标签,和静态文件,以及templates

    1 模板 -Templates 1 什么是模板 模板,在Flask中就是允许响应给用户看的网页在模板中,允许包含“占位变量”来表示动态的内容 模板最终也会被解析成字符串再响应给客户端,这一过程通常称为 ...