NOI2003 逃學的小孩

2022-08-05 01:39:09 字數 2134 閱讀 8116

chris家的**鈴響起了,裡面傳出了chris的老師焦急的聲音:「喂,是chris的家長嗎?你們的孩子又沒來上課,不想參加考試了嗎?」一聽說要考試,chris的父母就心急如焚,他們決定在盡量短的時間內找到chris。他們告訴chris的老師:「根據以往的經驗,chris現在必然躲在朋友shermie或yashiro家裡偷玩《拳皇》遊戲。現在,我們就從家出發去找chris,一但找到,我們立刻給您打**。」說完砰的一聲把**掛了。

chris居住的城市由n個居住點和若干條連線居住點的雙向街道組成,經過街道x需花費tx分鐘。可以保證,任兩個居住點間有且僅有一條通路。chris家在點c,shermie和yashiro分別住在點a和點b。chris的老師和chris的父母都有城市地圖,但chris的父母知道點a、b、c的具體位置而chris的老師不知。

為了盡快找到chris,chris的父母會遵守以下兩條規則:

如果a距離c比b距離c近,那麼chris的父母先去shermie家尋找chris,如果找不到,chris的父母再去yashiro家;反之亦然。

chris的父母總沿著兩點間唯一的通路行走。

顯然,chris的老師知道chris的父母在尋找chris的過程中會遵守以上兩條規則,但由於他並不知道a,b,c的具體位置,所以現在他希望你告訴他,最壞情況下chris的父母要耗費多長時間才能找到chris?

輸入格式:

輸入檔案第一行是兩個整數n(3 ≤ n ≤ 200000)和m,分別表示居住點總數和街道總數。

以下m行,每行給出一條街道的資訊。第i+1行包含整數ui、vi、ti(1≤ui, vi ≤ n,1 ≤ ti ≤ 1000000000),表示街道i連線居住點ui和vi,並且經過街道i需花費ti分鐘。街道資訊不會重複給出。

輸出格式:

輸出檔案僅包含整數t,即最壞情況下chris的父母需要花費t分鐘才能找到chris。

此題很容易看出是要先求樹的直徑,然後的操作我一開始的思路有些錯誤。

一開始我的想法是在直徑上找乙個點作為起點,在dfs的過程中記錄下直徑的路徑和權值road,

把road陣列字首和化,於是答案就是lenth+max;

但是在wa掉以後,我發現起點不在直徑上也許會更好,於是我們用spfa求出,每個點到直徑兩端的距離

那麼答案就是lenth+max;

實現如下:

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;inline ll read()

const

int n=200010

;int n,m,u,v,head[n],cnt=0,zq,zz,len=0

,book[n];

ll ans=0,w,maxn=0,road[n],dis[2

][n];

struct edgee[n<<1

];void add(int u,int v,ll w);head[u]=cnt;}

void dfs(int u,int

fa,ll siz)

for(int i=head[u],v=e[i].to;i;i=e[i].nxt,v=e[i].to) if(fa!=v) dfs(v,u,siz+e[i].val);

}queue

q;void spfa(int u,int

pre)

}}int

main()

dfs(

1,-1,0);zz=zq,maxn=0

; dfs(zq,-1,0

); spfa(zz,

0);spfa(zq,1

);

for(int i=1;i<=n;i++) ans=max(ans,min(dis[0][i],dis[1

][i]));

printf(

"%lld\n

",ans+maxn);

return0;

}

NOI2003 逃學的小孩

演算法 最短路 樹的直徑 難度 noip 注意 多年oi一場空,不開long long見祖宗!如果不開long long,應該會被卡到60分!注意 dfs找樹的直徑時,傳的引數 d 也要開long long哦!首先,因為無論如何答案都會包括a到b的dis,所以我們先用2遍dfs找到dis a b 的...

NOI2003 逃學的小孩

傳送門 here 題意 給出一棵樹 帶權 要從乙個節點c先走到距離它近的乙個節點b,再走到a,要求最壞情況下的總路程 即最長 解題思路 乍一看,a,b,c都沒給出,這怎麼求?不妨設距離c較近的點位a。分析發現,無論怎樣,a b是一定要走的。那麼如何能讓樹上任意兩點間距離最大呢?不難發現a,b就是該樹...

NOI2003 逃學的小孩 題解

前言 原題傳送門 洛谷 看了一下洛谷題面,這道noi的題竟然是藍的 惡評?做了一下好像確實是藍的.解法 思路非常簡單,找道樹的直徑,然後答案是直徑長度加上最大的min dis pos1 dis pos2 pos1和pos2是指定的任意一條直徑的兩個端點,dis是距離 證明 鑑於這是一棵樹 原題面 可...