12 9日 基環樹 dfs找環

2021-09-02 22:26:08 字數 1234 閱讀 8614

基環樹就是在一棵樹上加一條邊的圖。一般結合其他樹形dp、樹的直徑等題型考察,有一定難度。

處理方法一般都是先找環。

例如這道題目,bzoj 1791 [ioi2008] island 島嶼:求基環樹森林的樹直徑之和。後面的樹形dp不會,但找環和求以某點為根的子樹的深度還是可以的,用dfs。

先粘上求環中點的dfs**(以前都是並查集,,,):

#include #include #include #include #include #include#include #include #include #include#include#include#define ll long long

using namespace std;

const int n=100010,m=1000010;

int head[n];

int ver[m];

int edge[m];

int next[m];

bool v[n];

int tot;

priority_queue< pair>q;

void add(int x,int y,int z)

bool flag[n];

int path[n];

int sum;

int dfs(int x,int pre)

dfs(1,-1);

for(int i=1;i<=sum;++i)cout《更新簡潔**:

#include#define ll long long

#define inf 0x3f3f3f3f

#define io ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)

const int n=2e5+100;

using namespace std;

int head[n];

int next[n];

int ver[n];

int tot;

int deg[n];

int pre[n];

void add(int x,int y)

int ans[n];

int kk;

int dfn[n];

int cnt=0;

void dfs(int x)

dfs(1);

sort(ans+1,ans+1+kk);

for(int i=1;i<=kk;++i)cout

初識基環樹 gay環樹?

衢州飯店出鍋了?以為自己幸運,哪知無法逃過一劫。學個oi,菊花不保啊 霧。最近考了好多道關於基環樹 包括基環內向樹基環 外向樹 的題,趁機學一波 首先明確,基環樹不是樹。其是一顆樹 一條額外的邊,即一顆樹 乙個環。大致簡述一下這種特殊結構出現的主要原因就是n個點連出去n條邊,而樹是n點n 1條邊,這...

基環樹小結

持續更新ing 圖 的環顯而易見,一般的初始化流程有兩個 1 找環 void get ring ll u,ll fa cf835f 題目大意 刪掉一條邊,在保持聯通性的基礎上求最小直徑 既然要保持連通性,就只能考慮在環上刪邊 先將環中的每個節點子樹最大直徑求出 不跨過環 ll get d ll u,...

基環樹略解

基環樹,也叫環套樹,是一種圖的型別。如果連通圖 g g g 有 v e v e v e 則我們稱它是基環樹。顧名思義,基環樹就好似是在一棵樹上加一條邊得到的圖。基環樹有且僅有乙個環,所以也被成為環套樹。如上圖所示的圖就是一棵基環樹。基環樹沒什麼用。它只能解決部分特殊問題,而這類問題通常會註明 邊數 ...