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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Uva 11354 LCA 倍增祖先

發布時間:2023/11/29 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Uva 11354 LCA 倍增祖先 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:https://vjudge.net/contest/144221#problem/B

?

題意:找一條從 s 到 t ?的路,使得瓶頸路最小。

點的數目是10^4,如果向之前的方案求 maxcost數組,O(n*n)時間是過不了的,這個時候,用到了增倍祖先。

關于倍增祖先:http://m.w2bc.com/article/177601

我要補充的是,倍增祖先的優點,是在于倍增,他寫的案例,沒有體現出倍增,這里強調一下。有點像二分的思想;

?

利用倍增祖先初始化maxcost[i][j]數組,maxcost[i][j] 在倍增祖先里面表示的,結點 i 的第2j級祖先之間的瓶頸。

用O(nlogn)初始化,然后,查詢是O(logn)。

#include <bits/stdc++.h> using namespace std;const int maxn = 50000 + 10; const int INF = 0x3f3f3f3f; const int logmaxn = 20;int n,m;struct Edge {int u,v,d;bool operator < (const Edge& rhs) const{return d < rhs.d;} };Edge e[maxn];int pa[maxn];int Find_Set(int x) {if(x!=pa[x])pa[x] = Find_Set(pa[x]);return pa[x]; }vector<int> G[maxn],C[maxn];struct LCA {int n;int fa[maxn];int cost[maxn];int L[maxn];int anc[maxn][logmaxn];int maxcost[maxn][logmaxn];void preprocess(){for(int i=0; i<n; i++){anc[i][0] = fa[i];maxcost[i][0] = cost[i];for(int j=1; (1<<j)<n; j++)anc[i][j] = -1;}for(int j=1; (1<<j)<n; j++){for(int i=0; i<n; i++){if(anc[i][j-1]!=-1){int a = anc[i][j-1];anc[i][j] = anc[a][j-1];maxcost[i][j] = max(maxcost[i][j-1],maxcost[a][j-1]);}}}}int query (int p,int q){int log;if(L[p]<L[q]) swap(p,q);for(log=1; (1<<log)<=L[p]; log++);log--;int ans = -INF;for(int i=log; i>=0; i--){if(L[p]-(1<<i)>=L[q]){ans = max(ans,maxcost[p][i]);p = anc[p][i];}}if(p==q) return ans; //lca 是 pfor(int i=log; i>=0; i--){if(anc[p][i]!=-1&&anc[p][i]!=anc[q][i]){ans = max(ans,maxcost[p][i]);p = anc[p][i];ans = max(ans,maxcost[q][i]);q = anc[q][i];}}ans = max(ans,cost[p]);ans = max(ans,cost[q]);return ans;//LCA 是 fa[p] = fa[q]; }};LCA solver;void dfs(int u,int fa,int level) {solver.L[u] = level;for(int i=0; i<G[u].size(); i++){int v = G[u][i];if(G[u][i]!=fa){solver.fa[v] = u;solver.cost[v] = C[u][i];dfs(G[u][i],u,level+1);}} }int main() {//freopen("in.txt","r",stdin);int kase = 1;while(scanf("%d%d",&n,&m)==2&&n){for(int i=0; i<m; i++){int u,v,d;scanf("%d%d%d",&u,&v,&d);u--;v--;e[i] = (Edge){u,v,d};}sort(e,e+m);for(int i=0; i<n; i++){pa[i] = i;G[i].clear();C[i].clear();}for(int i=0; i<m; i++){int u = e[i].u;int v = e[i].v;int fx = Find_Set(u);int fy = Find_Set(v);if(fx!=fy){pa[fx] = fy;G[u].push_back(v);C[u].push_back(e[i].d);G[v].push_back(u);C[v].push_back(e[i].d);}}solver.n = n;dfs(0,-1,0);solver.preprocess();if(kase++!=1)puts("");int Q;scanf("%d",&Q);while(Q--){int u,v;scanf("%d%d",&u,&v);u--;v--;printf("%d\n",solver.query(u,v));}}return 0; }

?

轉載于:https://www.cnblogs.com/TreeDream/p/6146513.html

總結

以上是生活随笔為你收集整理的Uva 11354 LCA 倍增祖先的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 97国产精品视频人人做人人爱 | 欧美群妇大交群 | 日韩在线视频一区 | 日本蜜桃视频 | 九九热在线视频免费观看 | 欧洲性生活视频 | 老熟妇仑乱视频一区二区 | 久久精品1| 久久一本综合 | 牛av| 成人亚洲欧美 | 麻豆精品国产 | 午夜一级大片 | 色呦呦官网 | 欧美日韩三级 | 97自拍网 | 青苹果av | 久久三级 | 日韩婷婷 | 久久两性视频 | 色妇网| 久久久久久久久久久久久久久久久久久 | 青青草原在线免费观看视频 | 日韩福利一区二区 | 欧美日韩亚洲另类 | 国产精品18p | 在线观看国产视频 | 96视频在线观看 | 日韩中文第一页 | av无码一区二区三区 | 国产91香蕉 | 久久精品精品 | 亚洲区视频 | 黄a毛片| 欧美aaaa视频 | 99re国产精品| 亚洲一区观看 | 午夜伦伦 | 国产成人午夜精品 | 91久久中文字幕 | 在线伊人 | 日韩视频一区二区三区四区 | 国产日韩免费 | 国产乱码精品一区二区三区忘忧草 | 欧美人成在线 | 国产精品手机在线观看 | 成人免费看类便视频 | 在线久| 扒开jk护士狂揉免费 | 久热这里只有精品6 | 伊人精品视频 | 91传媒在线视频 | 亚洲美女网站 | 色欧美色 | 超碰日本 | 另类天堂| 国产一级免费av | 中文在线视频 | 久久久久久久久免费 | 黄瓜视频成人 | 亚洲综合视频在线播放 | 91在线视频网址 | 国产呦小j女精品视频 | 91成人免费观看 | 亚洲精品国产精品国自产观看 | 男女视频免费观看 | 亚洲国产精品视频一区二区 | 午夜视频福利在线观看 | 亚洲国产精品99久久久久久久久 | 亚洲香蕉久久 | 亚洲a√| 天天射综合网站 | 中文字幕在线日本 | 亚洲欧洲无码一区二区三区 | 天堂视频在线免费观看 | 成人三级黄色 | 日本高清视频在线播放 | 欧美一二在线 | 日韩黄片一区二区 | 亚洲免费在线视频观看 | 国产一区二区欧美日韩 | 欧美激情国产一区 | 亚洲一区二区在线视频 | 8x国产一区二区三区精品推荐 | 不卡欧美 | 日韩国产欧美一区二区三区 | 亚洲精品久久久久久久久久吃药 | 国产成人精品影院 | 无码国产伦一区二区三区视频 | 婷婷射 | 亚洲第一大网站 | 久草视频播放 | 色哟哟在线观看视频 | 美女视频久久 | 特级丰满少妇一级aaaa爱毛片 | 青青草成人免费在线视频 | 中文字幕日韩精品在线观看 | 天天射狠狠干 | 国产精品久久久久桃色tv |