給定一棵n個節點的樹,去掉這棵樹的一條邊需要消耗值1,為這個圖的兩個點加上一條邊也需要消耗值1。樹的節點編號從1開始。在這個問題中,你需要使用最小的消耗值(加邊和刪邊操作)將這棵樹轉化為環,不允許有重邊。
環的定義如下:
(1)該圖有n個點,n條邊。
(2)每個頂點的度數為2。
(3)任意兩點是可達的。
樹的定義如下:
(1)該圖有n個點,n-1條邊。
(2)任意兩點是可達的。
#include
#include
#include
#include
#define maxn 1000005
#define maxm maxn<<1
#define ll long long
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll i=a;i>=b;--i)
#define rep(i,a) for (ll i=last[a];i;i=next[i])
using
namespace std;
ll last[maxm]
,next[maxm]
,tov[maxm]
;ll f[maxn]
,fa[maxn]
,son[maxn]
;ll n,k,ans,tot;
dequeq;
inline ll read()
while
('0'
<=ch && ch<=
'9')x=x*
10+ch-
'0',ch=
getchar()
;return x*f;
}inline
void
link
(ll x,ll y)
intmain()
q.push_back(1
);while
(q.size()
fd(i,q.
size()
-1,0
)if(f[now]
<2)
++f[fa[now]];
else ans+
=f[now]
+(now==1?
-2:-
1);}
printf
("%lld\n",2
*ans+1)
;return0;
}
3230 佛山市選2013 樹環轉換
給定一棵n個節點的樹,去掉這棵樹的一條邊需要消耗值1,為這個圖的兩個點加上一條邊也需要消耗值1。樹的節點編號從1開始。在這個問題中,你需要使用最小的消耗值 加邊和刪邊操作 將這棵樹轉化為環,不允許有重邊。環的定義如下 1 該圖有n個點,n條邊。2 每個頂點的度數為2。3 任意兩點是可達的。樹的定義如...
JZOJ 6276 樹 掃瞄線 線段樹
傳送門 有一棵無根樹,現在有m mm個點對x,y x,yx,y,要求在任意u,v u,vu,v的簡單路徑上不能既經過x xx又經過y yy問一共有多少路徑滿足要求 正著推看起來思維難度很高,所以我們喜聞樂見的反著推,找出不合法的方案數就好了 我們先求出無根樹的dfs dfsdf s序,在輸入每個點對...
JZOJ5077 樹的難題
給定一棵 n 個點的無根樹,樹上每一條邊都有顏色。一共 m種顏色,編號從 1 到m。第 i 種顏色權值為ci 對於樹上的一條簡單路徑,路徑上經過的所有邊按照順序組成乙個顏色序列,序列可以劃分成若干個相同顏色段。定義路徑權值為顏色序列上每乙個同顏色段的顏色權值之和。你要計算出邊數在 l r 之內的所有...