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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组

發布時間:2024/3/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6203

題意:n+1 個點 n 條邊的樹(點標號 0 ~ n),有若干個點無法通行,導致 p 組 U V 無法連通。問無法通行的點最少有多少個。

解法:按照詢問的LCA深度排序,然后順序標記每個詢問的LCA。根據所給的樹(任意點為根)預處理出每個點的前序 DFS 序和后序 DFS 序(需統一標號),及點的深度。根據 p 組 U V 處理每組兩點的 LCA 。壓入優先隊列(LCA 深度大的點優先出隊)。對于出隊的 U V 及其對應的 LCA ,判斷點 U 或點 V 是否在之前已禁止的某點的子樹中,對于某點U如果在禁止通行的點P的子樹中,則L[P]<=L[U]<=R[U]<=R[P]一定成立。所以可以利用樹狀數組區間更新單點查詢,對于每個禁止通行點標記區間L[P],R[P]的所有節點。查詢的時候如果L[U]被標記,說明U,V已經被隔斷。

?

#include <bits/stdc++.h> using namespace std; const int maxn = 20100; typedef long long LL; vector <int> G[maxn]; int n, m, dfsclk, c[maxn], fa[maxn][21], dep[maxn], L[maxn], R[maxn]; bool vis[maxn]; struct node{int u,v,uv;node(){}node(int u,int v,int uv):u(u),v(v),uv(uv){}bool operator<(const node &rhs)const{return dep[uv]<dep[rhs.uv];} }; void dfs(int x){vis[x]=1;L[x]=++dfsclk;for(int i=0; i<G[x].size(); i++){int v=G[x][i];if(!vis[v]){dep[v]=dep[x]+1;fa[v][0]=x;dfs(v);}}R[x]=++dfsclk; } void init(){for(int j=1; j<=20; j++)for(int i=1; i<=n; i++)fa[i][j] = fa[fa[i][j-1]][j-1]; } int LCA(int u, int v){if(dep[u]<dep[v]) swap(u,v);for(int i=20; i>=0; i--){if((dep[u]-dep[v])&(1<<i))u=fa[u][i];}if(u==v) return u;for(int i=20; i>=0; i--){if(fa[u][i]!=fa[v][i]){u=fa[u][i];v=fa[v][i];}}return fa[u][0]; } int lowbit(int x){return x&(-x); } void add(int x, int v){while(x<maxn){c[x]+=v;x+=lowbit(x);} } void update(int x, int y, int z){add(x, z);add(y+1, -z); } int query(int x){int ret=0;while(x>0){ret+=c[x];x-=lowbit(x);}return ret; } int main() {while(~scanf("%d", &n)){memset(c, 0, sizeof(c));memset(vis, 0, sizeof(vis));memset(dep, 0, sizeof(dep));for(int i=0; i<=n+1; i++) G[i].clear();for(int i=1; i<=n; i++){int u,v;scanf("%d %d", &u,&v);u++,v++;G[u].push_back(v);G[v].push_back(u);}n++;dfsclk = 0;dfs(1);init();priority_queue <node> q;scanf("%d", &m);while(m--){int u, v;scanf("%d %d", &u,&v);u++;v++;int uv = LCA(u, v);q.push(node(u,v,uv));}int ans=0;while(!q.empty()){node now = q.top();q.pop();int flag = query(L[now.u])+query(L[now.v]);if(flag==0){ans++;update(L[now.uv],R[now.uv],1);}}printf("%d\n", ans);}return 0; }

?

轉載于:https://www.cnblogs.com/spfa/p/7515837.html

總結

以上是生活随笔為你收集整理的HDU 6203 2017沈阳网络赛 LCA,DFS+树状数组的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91香蕉国产在线观看软件 | 99国产精品免费 | 国产视频三区 | 欧av在线 | av片免费在线播放 | 欧美a∨亚洲欧美亚洲 | 欧美性爱视频久久 | 国产婷婷一区二区 | 蜜桃av免费看 | 精品国产99久久久久久 | 一区二区三区久久精品 | 日韩成人在线观看视频 | 欧美动态视频 | 国产99色 | 亚洲婷婷一区 | 国产成人a人亚洲精品无码 在线aa | 亚洲欧美日韩系列 | 在线观看国产小视频 | 亚洲一区二区三区三州 | 成年人看的视频网站 | 欧美aaaa视频 | 中文字幕免费在线播放 | 国产一区二区不卡在线 | 久久香蕉国产 | caoprom超碰| 国产精品3 | 欧美日韩国产一区在线 | 成人在线亚洲 | 国产乱子伦农村叉叉叉 | 国产aa毛片 | 蜜芽在线视频 | 天天av天天操 | 日日夜夜精品视频免费 | 欧美另类视频 | 国产天天综合 | 成人在线播放av | 欧美又大粗又爽又黄大片视频 | 国产真实乱人偷精品 | 久久99一区| 日韩精品高清视频 | 久久久久不卡 | 91久久精品国产 | 免费在线观看视频 | av激情久久 | 成人乱人乱一区二区三区 | 日韩一区二区中文字幕 | 欧美一区二区三区国产 | 国产精品20p | 奴性女会所调教 | 91久久精品日日躁夜夜躁欧美 | 亚洲图片欧美视频 | 久久综合久久综合久久综合 | 青青射| 免费午夜激情 | 午夜精品视频在线 | 亚洲 国产 欧美 日韩 | 天天操天天操天天操天天操天天操 | 潘金莲一级淫片aaaaa武则天 | 毛片网站在线免费观看 | 先锋资源中文字幕 | 国产爆乳无码一区二区麻豆 | 99爱在线观看 | 久草福利在线视频 | av小片| 日韩欧美日韩 | 中文字幕一区二区三区波野结 | a免费在线 | 777777av| 日韩av免费网站 | 天天色成人 | 二区影院 | 长腿校花无力呻吟娇喘的视频 | 巨茎大战刘亦菲 | 中文字幕 人妻熟女 | 超级乱淫视频 | 伊人久久青草 | 国产欧美一区二区三区在线老狼 | 不卡av片 | 欧美人与性动交xxⅹxx | 奇米二区 | 精品黄色一级片 | 欧美激情精品久久久久 | 久久亚洲精品国产 | 免费在线观看不卡av | 强行侵犯视频在线观看 | 奇米影视首页 | 国产在线精品自拍 | 亚洲成人乱码 | www.在线视频 | 草草影院国产 | 91华人在线 | 天天天干 | 麻豆changesxxx国产 | 免费看黄色aaaaaa 片 | 日韩视频在线免费观看 | 欧美午夜精品理论片 | 人人妻人人澡人人爽欧美一区 | 五月婷婷网站 | 这里只有久久精品 |