[BZOJ1509][NOI2003]逃學的小孩

1509: [NOI2003]逃學的小孩

Time Limit: 5 Sec??Memory Limit: 64 MB
Submit: 968??Solved: 489
[Submit][Status][Discuss]

Description

Input

第一行是兩個整數N(3 ? N ? 200000)和M,分別表示居住點總數和街道總數。以下M行,每行給出一條街道的信息。第i+1行包含整數Ui、Vi、Ti(1?Ui, Vi ? N,1 ? Ti ? 1000000000),表示街道i連接居住點Ui和Vi,并且經過街道i需花費Ti分鐘。街道信息不會重復給出。

Output

僅包含整數T,即最壞情況下Chris的父母需要花費T分鐘才能找到Chris。

Sample Input

4 3
1 2 1
2 3 1
3 4 1

Sample Output

4
枚舉每個點為三條路徑的交點,設到這個點的第一、二、三長鏈的長度分別為$x,y,z$,則最長路徑為$x+2*y+z$
注意可能從父親那里有一條鏈連過來,所以dfs兩遍
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char buf[10000000], *ptr = buf - 1;
inline int readint() {int n = 0;char ch = *++ptr;while (ch< '0' || ch > '9') ch = *++ptr;while (ch <= '9' && ch >= '0') {n = (n << 1) + (n << 3) + ch - '0';ch = *++ptr;}return n;
}
typedef long long ll;
const int maxn = 200000 + 10;
const ll INF = 1LL << 60;
struct Edge {int to, val, next;Edge() {}Edge(int _t, int _v, int _n) : to(_t), val(_v), next(_n) {}
}e[maxn * 2];
int fir[maxn] = { 0 }, cnt = 0;
inline void ins(int u, int v, int w) {e[++cnt] = Edge(v, w, fir[u]); fir[u] = cnt;e[++cnt] = Edge(u, w, fir[v]); fir[v] = cnt;
}
int fa[maxn];
ll mx1[maxn], mx2[maxn], mx3[maxn], f[maxn];
void dfs1(int u) {mx1[u] = mx2[u] = mx3[u] = 0;for (int v, i = fir[u]; i; i = e[i].next) {v = e[i].to;if (v == fa[u]) continue;fa[v] = u;dfs1(v);mx3[u] = max(mx3[u], mx1[v] + e[i].val);if (mx3[u] > mx2[u]) swap(mx3[u], mx2[u]);if (mx2[u] > mx1[u]) swap(mx2[u], mx1[u]);}
}
void dfs2(int u) {for (int v, i = fir[u]; i; i = e[i].next) {v = e[i].to;if (v == fa[u]) continue;f[v] = f[u] + e[i].val;if (mx1[v] + e[i].val == mx1[u])f[v] = max(f[v], mx2[u] + e[i].val);elsef[v] = max(f[v], mx1[u] + e[i].val);dfs2(v);}
}
ll ans = 0;
inline void solve(ll &x, ll &y, ll &z) {if (z > y) swap(z, y);if (y > x) swap(y, x);ans = max(ans, x + (y << 1) + z);
}
int main() {fread(buf, sizeof(char), sizeof(buf), stdin);int n = readint();readint();for (int u, v, w, i = 1; i < n; i++) {u = readint();v = readint();w = readint();ins(u, v, w);}fa[1] = 0;dfs1(1);f[1] = 0;dfs2(1);for (int i = 1; i <= n; i++)if (f[i] < mx3[i]) solve(mx1[i], mx2[i], mx3[i]);else solve(mx1[i], mx2[i], f[i]);printf("%lld\n", ans);return 0;
}

?

轉載于:https://www.cnblogs.com/ruoruoruo/p/7612276.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282270.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282270.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282270.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十一隨筆|讀書

十一放假回老家前三天一直下雨&#xff0c;沒法幫父母干農活&#xff0c;陰雨天氣農村就閑下來了親戚間走動&#xff0c;長輩們談論孩子不好好學習&#xff0c;孩子抱怨學習沒用大學畢業照樣找不到工作。現在大學生就業現狀確實不容樂觀&#xff0c;當下不好好學習沒有拖底&…

yii之behaviors

BaseController: protected $actions [*];protected $except [];protected $mustlogin [];protected $verbs [];// 行為過濾public function behaviors(){return [access > [class > \yii\filters\AccessControl::className(),only > $this->actions, // 針對哪…

關閉 Visual Studio 2013 的 Browser Link 功能

什么是 Browser Link ? 這個 Browser Link 的功能就是通過一個腳本文件架起流程器和 Visual Studio IDE 之前的一個通信橋梁&#xff0c; 在啟用 Browser Link 后&#xff0c; Visual Studio 會給網站注入一個 IHttpModule 模塊對象&#xff0c; 然后在每個頁面都會注冊一段上…

Groove list操作-轉數組,collect,each等

2019獨角獸企業重金招聘Python工程師標準>>> list轉換為數組 List list [a,b,c,d] def strs list as String[] println strs[0] 使用了Groovy語言&#xff0c;就能時不時的感受到Groovy語言在編碼風格上與Java語言的不同。當然&#xff0c;我們首先感受到的可能就…

支持多種操作系統的新一代服務主機

一個應用需要常駐操作系統后臺服務&#xff0c;可選框架有WindowsServiceLifeTime和SystemdLifeTime&#xff0c;但需要區別對待不同操作系統且需要另外寫命令安裝。NewLife.Agent自2008年設計以來&#xff0c;一直秉著簡單易用的原則&#xff0c;不僅實現了服務框架&#xff0…

c#中的奇異遞歸模式

奇異遞歸模式&#xff0c;Curiously Recurring Template Pattern (CRTP) &#xff0c;作用是能使父類中能夠使用子類的信息。下面是我對這個問題的分析過程。 按照一般的繼承關系&#xff0c;父類是無法訪問到子類的&#xff0c;所以很自然的想到了c#中的泛型&#xff0c;將子類…

面試中get和post的區別

get和post的區別主要有以下幾方面&#xff1a;1、url可見性&#xff1a; get&#xff0c;參數url可見&#xff1b; post&#xff0c;url參數不可見2、數據傳輸上&#xff1a; get&#xff0c;通過拼接url進行傳遞參數&#xff1b; post&#xff0c;通過body體傳輸參數3、緩存性…

程序猿與線性代數

逛微博&#xff0c;摸到了一堆寶&#xff1a;關于線性代數學習的文章。先是發現了陳曉鳴&#xff08;http://weibo.com/acumon&#xff09;&#xff0c;前百度資深project師&#xff0c;終身學習者。再找到“文藝復興記”&#xff08;http://weibo.com/weidagang&#xff09;。…

Verilog MIPS32 CPU(八)-- 控制器

Verilog MIPS32 CPU&#xff08;一&#xff09;-- PC寄存器Verilog MIPS32 CPU&#xff08;二&#xff09;-- RegfilesVerilog MIPS32 CPU&#xff08;三&#xff09;-- ALUVerilog MIPS32 CPU&#xff08;四&#xff09;-- RAMVerilog MIPS32 CPU&#xff08;五&#xff09;--…

[翻譯]Dapr 長程測試和混沌測試

介紹這是Dapr的特色項目&#xff0c;具體參見&#xff1a;https://github.com/dapr/test-infra/issues/11 &#xff0c;在全天候運行的應用程序中保持Dapr可靠性至關重要。在部署真正的應用程序之前&#xff0c;可以通過在受控的混沌環境中構建&#xff0c;部署和操作此類應用程…

python UDP-數據報協議

基于udp協議通信的套接字 服務端 1 from socket import *2 3 server socket(AF_INET, SOCK_DGRAM) # SOCK_DGRAM>數據報協議4 server.bind((127.0.0.1, 8080))5 6 print(start....)7 while True:8 data, client_addr server.recvfrom(1024) # (bhello, (127.0.0.1, …

Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

一、問題描述&#xff1a; 在服務器端可以正常連接并操作mysql&#xff0c;但是在windows端使用navicat工具遠程ssh連接就出現下面錯誤。 1、服務器端&#xff1a; 2、windows端navicat連接 3、原因 原來我今天在做主從配置的時候&#xff0c;將 /etc/my.cnf 配置文件中的b…

自定義ProgressBar(圓)

2019獨角獸企業重金招聘Python工程師標準>>> <lib.view.progressbar.ColorArcProgressBarandroid:layout_width"match_parent"android:layout_height"220dip"android:id"id/barInterest"android:layout_centerInParent"true&…

C# Task用法詳解

概述Task是微軟在.Net 4.0時代推出來的&#xff0c;Task看起來像一個Thread&#xff0c;實際上&#xff0c;它是在ThreadPool的基礎上進行的封裝&#xff0c;Task的控制和擴展性很強&#xff0c;在線程的延續、阻塞、取消、超時等方面遠勝于Thread和ThreadPool&#xff0c;所以…

函數調用堆棧圖

轉載于:https://www.cnblogs.com/DeeLMind/p/7617972.html

jquery運動

在前面封裝的move.js框架&#xff0c;在jquery中有同樣封裝好的功能animate()。使用方法非常類似&#xff0c;下面我們看看animate的使用方法&#xff0c;有了原生的運動方法&#xff0c;然后再使用jquery的運動方法就會變得非常簡單。 animate()語法 $(selector).animate({par…

Session的原理,大型網站中Session方面應注意什么?

一、Session和Cookie的區別 Session是在服務器端保持會話數據的一種方法&#xff08;通常用于pc端網站保持登錄狀態&#xff0c;手機端通常會使用token方式實現&#xff09;&#xff0c;存儲在服務端。 Cookie是在客戶端保持用戶數據&#xff0c;存儲位置是客戶端&#xff08…

MySQL5.5讀寫分離之mysql-proxy

通常一個網站在初期訪問量都比較小&#xff0c;所以一般的小架構足以支撐。但是&#xff0c;當網站逐漸發展起來后&#xff0c;隨之而來的是大量的訪問&#xff0c;這時候最先出現的瓶頸就是數據庫了。因為數據的寫入讀取操作&#xff08;I/O&#xff09;是集群中響應速度最慢的…

兩圓相交求面積 hdu5120

轉載 兩圓相交分如下集中情況&#xff1a;相離、相切、相交、包含。 設兩圓圓心分別是O1和O2&#xff0c;半徑分別是r1和r2&#xff0c;設d為兩圓心距離。又因為兩圓有大有小&#xff0c;我們設較小的圓是O1。 相離相切的面積為零&#xff0c;代碼如下&#xff1a; [cpp] view …

Python_list部分功能介紹

x.append():在列表尾部添加一個元素 x.clear():把列表清空 x.count():判斷某個元素出現的次數 x.extend():合并兩個列表&#xff0c;或者一個元組 x.index():獲取元素下標 x.insert():指定下標添加元素 x.pop():移除某一元素&#xff0c;移除的元素可獲取 x.remove():移除指定的…