bzoj3124 亂搞 直徑

2021-08-19 03:48:41 字數 2486 閱讀 4336

description

小q最近學習了一些圖論知識。根據課本,有如下定義。樹:無迴路且連通的無向圖,每條邊都有正整數的權值來表示其長度。如果一棵樹有n個節點,可以證明其有且僅有n-1

條邊。 路徑:一棵樹上,任意兩個節點之間最多有一條簡單路徑。我們用 dis(a,b)

表示點a和點b的路徑上各邊長度之和。稱dis(a,b)為a、b兩個節點間的距離。

直徑:一棵樹上,最長的路徑為樹的直徑。樹的直徑可能不是唯一的。

現在小q想知道,對於給定的一棵樹,其直徑的長度是多少,以及有多少條邊滿足所有的直徑都經過該邊。

input

第一行包含乙個整數n,表示節點數。 接下來n-1行,每行三個整數a, b, c ,表示點 a和點b之間有一條長度為c 的無向邊。

output

共兩行。第一行乙個整數,表示直徑的長度。第二行乙個整數,表示被所有 直徑經過的邊的數量。

sample input

6

3 1 1000

1 4 10

4 2 100

4 5 50

4 6 100

sample output

1110

hint

【樣例說明】

直徑共有兩條,3 到2的路徑和3到6的路徑。這兩條直徑都經過邊(3, 1)和邊(1, 4)。 hint

對於100%的測試資料:2≤n≤200000,所有點的編號都在1..n的範圍內,

邊的權值≤10^9。

題解

第一問不用說了吧。。

關於第二問,有兩個性質

1:滿足答案的邊都在一條直徑上(因為每條直徑上面都有嘛)

2:這些邊一定是連續的一條鏈,這個yy一下就知道了的。。

如果直徑上有乙個點,這個點能引出兩條或以上的相同長度且最長的鏈,那麼這個點之後的所有點都不可能成為答案

於是我們可以跑兩遍dfs,同時記錄答案

然後就沒了。。

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

struct node

a[410000];int len,last[210000];

void ins(int x,int y,ll c)

int g,lx,ly;

ll d[210000];

int n;

void getmx(int x,int fa)

int pre[210000],nxt[210000],tmp[210000];

bool bk;

void getpath(int x,int ed,int fa)

for(int k=last[x];k;k=a[k].next)

if(bk)return;

}}bool vis[210000];

ll f[210000];

void dfs(int x,int fa)

else bk=true;}}

if(bk==true)vis[x]=true;//這裡開始有兩個相等的最長

}bool v[210000];

int main()

g=0;getmx(1,0);

lx=g;d[lx]=0;g=0;

getmx(lx,0);

ly=g;

printf("%lld\n",d[ly]);

bk=false;getpath(lx,ly,0);

memset(v,false,sizeof(v));

int u=ly;

while(u!=lx)nxt[pre[u]]=u,u=pre[u];

memset(vis,false,sizeof(vis));

dfs(lx,0);

u=lx;

while(u!=ly)

u=nxt[u];

}if(u==ly && !vis[u])v[u]=true;

memset(vis,false,sizeof(vis));

dfs(ly,0);

u=ly;

int ans=0;

while(u!=lx)

else

u=pre[u];

}if(u==lx && !vis[u] && v[u])ans++;

printf("%d\n",ans-1);

return

0;}

BZOJ5085 最大 亂搞

description 給你乙個n m的矩形,要你找乙個子矩形,價值為左上角左下角右上角右下角這四個數的最小值,要你最大化矩形的價值。sample input 2 21 2 3 4sample output 1bitset 好 n 3信仰ac include include include incl...

bzoj 5091 摘蘋果 期望 亂搞

小q的工作是採摘花園裡的蘋果。在花園中有n棵蘋果樹以及m條雙向道路,蘋果樹編號依次為1到n,每條道路的兩 端連線著兩棵不同的蘋果樹。假設第i棵蘋果樹連線著d i條道路。小q將會按照以下方式去採摘蘋果 1.小q隨機移動到一棵蘋果樹下,移動到第i棵蘋果樹下的概率為d i 2m 但不在此採摘。2.等概率隨...

bzoj3004 吊燈 亂搞 結論題

alice家裡有一盞很大的吊燈。所謂吊燈,就是由很多個燈泡組成。只有乙個燈泡是掛在天花板上的,剩下的燈泡都是掛在其他的燈泡上的。也就是說,整個吊燈實際上類似於一棵樹。其中編號為1的燈泡是掛在天花板上的,剩下的燈泡都是掛在編號小於自己的燈泡上的。現在,alice想要辦一場派對,她想改造一下這盞吊燈,將...