基環樹上dp luoguP1453 城市環路

2021-08-28 19:59:08 字數 1006 閱讀 7304

傳送門

quq基環樹上的dp

先dp樹再dp環,然後注意環上還要記錄一維開始那個節點有沒有選,因為最後乙個節點和第乙個也不能衝突

#include#include#include#include#include#include#define n 100005

using namespace std;

int n,val[n],cnt,head[n],stk[n],top,s,t;

double k,f[n][2],g[n][2][2];

bool ***,vis[n],isc[n];

vectorcir;

inline int rd()

struct edgeedge[n<<1];

inline void add(int x,int y)

inline double max(double x,double y)

inline void dfs(int u,int fa)

cir.push_back(u); isc[u]=1; ***=1;

return;

} vis[u]=1; stk[++top]=u;

for(int i=head[u];i;i=edge[i].nxt)

return;

}inline void dp(int u,int fa) return;

}int main()

scanf("%lf",&k);

dfs(1,0); memset(vis,0,sizeof vis);

for(int i=0;is=cir[0],t=cir[cir.size()-1];

g[s][0][0]=f[s][0],g[s][1][1]=f[s][1];

for(int i=1;ielse

} printf("%.1lf",max(g[t][0][0],max(g[t][1][0],g[t][0][1])));

return 0;

}

基環樹小結

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

初識基環樹 gay環樹?

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

聖戰 奇環, 樹上差分

若 x xx 與 y yy 之間有敵對關係,則在 x xx 和 y yy 之間連一條邊,依此建出乙個圖,當圖中存在奇環時,無法完成二染色,說明無法劃分為 2 22 個合法的陣營,現在目的就是刪去其中一條邊,使得圖中不存在奇環,自然而然的,刪去的邊是所有奇環的交,所以現在需要求出哪些邊是所有奇環的交....