JZOJ3230 樹環轉換

2021-09-24 20:34:59 字數 1270 閱讀 7893

給定一棵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 之內的所有...