description
小q最近學習了一些圖論知識。根據課本,有如下定義。樹:無迴路且連通的無向圖,每條邊都有正整數的權值來表示其長度。如果一棵樹有n個節點,可以證明其有且僅有n-1input條邊。 路徑:一棵樹上,任意兩個節點之間最多有一條簡單路徑。我們用 dis(a,b)
表示點a和點b的路徑上各邊長度之和。稱dis(a,b)為a、b兩個節點間的距離。
直徑:一棵樹上,最長的路徑為樹的直徑。樹的直徑可能不是唯一的。
現在小q想知道,對於給定的一棵樹,其直徑的長度是多少,以及有多少條邊滿足所有的直徑都經過該邊。
第一行包含乙個整數n,表示節點數。 接下來n-1行,每行三個整數a, b, c ,表示點 a和點b之間有一條長度為c 的無向邊。output
共兩行。第一行乙個整數,表示直徑的長度。第二行乙個整數,表示被所有 直徑經過的邊的數量。sample input
6sample output3 1 1000
1 4 10
4 2 100
4 5 50
4 6 100
1110hint
【樣例說明】題解直徑共有兩條,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想要辦一場派對,她想改造一下這盞吊燈,將...