日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF372D. Choosing Subtree is Fun

發布時間:2023/12/3 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF372D. Choosing Subtree is Fun 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CF372D. Choosing Subtree is Fun

Solution

想了一晚都不會,一覺醒來就悟了QwQQwQQwQ
之前一直想著如何用類似樹形DPDPDP的方法求出每一個點的貢獻再合并,然后突然發現直接枚舉區間就行了。

考慮區間確定時,其實就是求區間內節點在原樹上的斯坦納樹的點數。
我們枚舉左端點lll,顯然隨著lll的增加,rrr時非降的,因此動態維護斯坦納樹的點數即可。

因為斯坦納樹的邊數,就是每個關鍵點的深度和減去dfsdfsdfs序相鄰的關鍵點的LCALCALCA的深度和,而點數為邊數加一。每次操作會加入一個點,刪除一個點,用setsetset維護關鍵點的dfsdfsdfs序,計算貢獻即可。

Code

#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <cctype> #include <string> #include <cstring> #include <ctime> #include <cassert> #include <string.h> //#include <unordered_set> //#include <unordered_map> //#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B) #define PB(A) push_back(A) #define SIZE(A) ((int)A.size()) #define LEN(A) ((int)A.length()) #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define fi first #define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; } template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll; typedef unsigned long long ull; typedef long double lod; typedef pair<int,int> PR; typedef vector<int> VI;const lod eps=1e-11; const lod pi=acos(-1); const int oo=1<<30; const ll loo=1ll<<62; const int mods=1e9+7; const int MAXN=400005; const int INF=0x3f3f3f3f;//1061109567 /*--------------------------------------------------------------------*/ inline int read() {int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f; } set<int> Set; vector<int> e[MAXN]; int id[MAXN],dfn[MAXN],DFN=0,dep[MAXN],mn[18][MAXN],n,Log[MAXN],sum=0,k,ans=1,num=0,eul[MAXN],ID[MAXN]; void dfs(int x,int father) {id[dfn[x]=++DFN]=x,dep[x]=dep[father]+1,ID[eul[x]=++num]=x;for (auto v:e[x])if (v!=father) {dfs(v,x);ID[++num]=x;} } void Init() {for (int i=1;i<=num;i++) mn[0][i]=dep[ID[i]];for (int i=1;i<=17;i++)for (int j=1;j<=num-(1<<i)+1;j++) mn[i][j]=min(mn[i-1][j],mn[i-1][j+(1<<(i-1))]); } int getdep(int l,int r) {l=eul[id[l]],r=eul[id[r]];if (l>r) swap(l,r);int x=Log[r-l+1];return min(mn[x][l],mn[x][r-(1<<x)+1]); } void add(int x) {set<int>::iterator it=Set.lower_bound(x);int nxt,lst;if (it==Set.end()) nxt=*Set.begin(),it--,lst=*it;else if (it==Set.begin()) nxt=*it,lst=*Set.rbegin();else nxt=*it,it--,lst=*it;if (nxt==lst) sum+=getdep(lst,lst)+getdep(x,x)-getdep(x,lst)*2;else sum+=getdep(x,x)+getdep(lst,nxt)-getdep(x,nxt)-getdep(lst,x);Set.insert(x); } void del(int x) {Set.erase(Set.find(x));if (!Set.size()) return; set<int>::iterator it=Set.lower_bound(x);int nxt,lst;if (it==Set.end()) nxt=*Set.begin(),it--,lst=*it;else if (it==Set.begin()) nxt=*it,lst=*Set.rbegin();else nxt=*it,it--,lst=*it;if (nxt==lst) sum-=getdep(lst,lst)+getdep(x,x)-getdep(x,lst)*2;else sum-=getdep(x,x)+getdep(lst,nxt)-getdep(x,nxt)-getdep(lst,x); } signed main() {n=read(),k=read(),ans=1;for (int i=1,u,v;i<n;i++) u=read(),v=read(),e[u].PB(v),e[v].PB(u);Log[1]=0; for (int i=2;i<=n*2;i++) Log[i]=Log[i>>1]+1;dfs(1,0),Init(),Set.insert(dfn[1]);for (int l=1,r=1;l<n;l++){while (r<n&&sum+1<=k) r++,add(dfn[r]);if (sum+1>k) upmax(ans,r-l);else upmax(ans,r-l+1);del(dfn[l]);}printf("%d\n",ans);return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的CF372D. Choosing Subtree is Fun的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av色图在线| 最新版天堂资源在线 | 26uuu亚洲国产精品 | 久久久7777 | 国产在线a视频 | 国产视频1区2区 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品久久久久久久久免费 | 亚洲综合图色40p | 亚洲色成人一区二区三区小说 | 337p粉嫩大胆噜噜噜噜69影视 | 免费一级片在线观看 | 久久久黄色大片 | 超碰碰碰| 久久久情 | 福利在线免费视频 | 国产视频三级 | 91性高潮久久久久久久久 | 国产福利不卡 | 精品午夜久久久 | 欧美精品欧美极品欧美激情 | 岛国伊人| 亚洲激情免费 | 国产网红主播精品av | 雷电将军和丘丘人繁衍后代视频 | 美女扒开尿口给男人看 | 欧美日韩在线免费播放 | 久久久精品视频免费 | 天天色影综合网 | 久久国产精品精品国产 | 超碰h | 91久久伊人 | 久久国产精品久久久久久 | 美日韩中文字幕 | 伊人亚洲 | 黄色三级免费观看 | 日韩少妇裸体做爰视频 | 日韩一级片免费观看 | 国内老熟妇对白xxxxhd | 懂色av一区二区在线播放 | 欧美级毛片 | 久久精品亚洲一区二区 | 亚洲最黄视频 | 亚洲无码一区二区三区 | 女人洗澡一级特黄毛片 | 激情五月婷婷网 | 永久免费网站直接看 | 自拍偷拍亚洲图片 | 欧美撒尿777hd撒尿 | 欧美成人免费播放 | 男女做激情爱呻吟口述全过程 | 国产精品视频免费在线观看 | 日本不卡一区二区三区视频 | 麻豆传媒网站在线观看 | 日韩一卡二卡三卡 | 人妻在卧室被老板疯狂进入 | 日本黄色高清视频 | 国产九色sp调教91 | 91麻豆精品视频 | 夫妻性生活自拍 | 国产日韩欧美一二三区 | 99在线精品视频免费观看软件 | 成人网在线免费观看 | 男人天堂av网站 | 免费簧片在线观看 | 色窝窝无码一区二区三区 | 黄页视频在线观看 | 天天做天天爱天天爽综合网 | 完全免费av | 中文字幕一区久久 | 亚洲黄色视屏 | 亚洲欧洲一二三区 | 亚洲精品18p | 欧美日韩在线一区二区三区 | 欧美视频xxxx| 国产又黄又粗又猛又爽的视频 | 91精品国产91久久久久福利 | 欧美国产日韩一区二区三区 | 欧美成人精品一区二区三区在线观看 | 天天摸天天舔天天操 | 一区二区三区免费看视频 | 午夜秋霞 | 国产亚洲精品成人av在线 | 欧美大色网 | 99999av| 久久中文免费视频 | 亚洲人交配| 国产1区在线观看 | 在线观看的网站 | 国精产品一区一区三区免费视频 | 艳妇臀荡乳欲伦交换gif | 久久黄色小说 | 正在播放经典国语对白 | 免费一区二区三区视频在线 | 国产一区福利 | 黄色av免费播放 | 日韩美一区二区三区 | 久久久久久免费毛片精品 | 亚洲一卡二卡三卡四卡 |