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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P5236-[模板]静态仙人掌【tarjan,LCA】

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P5236-[模板]静态仙人掌【tarjan,LCA】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P5236


題目大意

給一個邊仙人掌(一條邊至多在一個環中),每次詢問兩點之間的距離


解題思路

我們對于每個環新建方點,然后方點連向所有環上的點,然后計算一下每一條的邊權

需要注意的是,如果兩個詢問點的LCALCALCA是一個方點,那么需要特判


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=3e4+10,K=18; struct node{int to,next,w; }a[N*2],e[N*2]; int n,m,q,tot,num,cnt; int f[N][K],s[N],val[N],dep[N],dis[N]; int ls[N],rs[N],dfn[N],low[N]; void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];a[tot].w=w;ls[x]=tot; } void adde(int x,int y,int w){e[++tot].to=y;e[tot].next=rs[x];e[tot].w=w;rs[x]=tot; } void circle(int x,int y,int w){num++;int now=y,sum=w;while(now!=f[x][0]){s[now]=sum;sum+=val[now];now=f[now][0];}sum=s[num]=s[x];s[x]=0;now=y;int Dis;while(now!=f[x][0]){Dis=min(s[now],sum-s[now]);adde(num,now,Dis);adde(now,num,Dis);now=f[now][0];}return; } void tarjan(int x){dfn[x]=low[x]=++cnt;int flag=0;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==f[x][0])continue;if(!dfn[y]){f[y][0]=x;val[y]=a[i].w;tarjan(y);low[x]=min(low[x],low[y]);}else low[x]=min(low[x],dfn[y]);if(low[y]<=dfn[x])continue;adde(x,y,a[i].w);adde(y,x,a[i].w);}for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(x==f[y][0]||dfn[x]>=dfn[y])continue;circle(x,y,a[i].w);}return; } void dfs(int x,int fa){for(int i=rs[x];i;i=e[i].next){int y=e[i].to;if(y==fa)continue;dep[y]=dep[x]+1;dis[y]=dis[x]+e[i].w;f[y][0]=x;dfs(y,x);}return; } int Get_dis(int x,int y){int u=x,v=y;if(dep[x]>dep[y])swap(x,y);for(int i=K-1;i>=0;i--)if(dep[f[y][i]]>=dep[x])y=f[y][i];int lca;if(x!=y){for(int i=K-1;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];lca=f[x][0];}else lca=x;if(lca<=n)return dis[u]+dis[v]-dis[lca]*2;else {int ans=dis[u]-dis[x]+dis[v]-dis[y];return ans+min(s[lca]-abs(s[x]-s[y]),abs(s[x]-s[y]));} } int main() {scanf("%d%d%d",&n,&m,&q);num=n;for(int i=1;i<=m;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);addl(x,y,w);addl(y,x,w);}tot=0;tarjan(1);dep[1]=1;dfs(1,0);for(int i=1;i<K;i++)for(int j=1;j<=num;j++)f[j][i]=f[f[j][i-1]][i-1]; for(int i=1;i<=q;i++){int x,y;scanf("%d%d",&x,&y);printf("%d\n",Get_dis(x,y));} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的P5236-[模板]静态仙人掌【tarjan,LCA】的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 女人看黄色网 | 亚洲精品在线免费看 | 日人视频 | 中文字幕在线观看免费视频 | 日韩一区二区三区三四区视频在线观看 | 国产精品视频在线观看 | 天天操天天操天天操天天操 | 美女三级黄色 | 国产无遮挡又黄又爽免费网站 | 欧美性受xxxx黑人xyx性爽 | 国产三级一区二区 | 香蕉久久一区二区三区 | 国产精品亚洲自拍 | 亚洲国产综合在线 | 免费观看nba乐趣影院 | 四虎永久在线精品免费网址 | 国产成人无码一二三区视频 | 日本男女啪啪 | 红桃视频一区二区三区免费 | 日本免费爱爱视频 | 精品久久久无码中文字幕边打电话 | 国语对白清晰刺激对白 | 国产三级视频网站 | 中文字幕av专区dvd | 日韩欧美国产一区二区三区在线观看 | 青在线视频 | 久久黄色网 | 国产一区二区精品丝袜 | 国产精品伦一区二区三级视频 | av精选 | 一区二区三区在线免费视频 | 99re视频在线播放 | 少妇激情一区二区三区 | 日韩亚洲欧美综合 | 91传媒在线播放 | 国产毛片精品国产一区二区三区 | 91影视在线观看 | 爱爱一区二区三区 | 污视频免费在线观看 | 97人人艹| 久久538 | 粗了大了 整进去好爽视频 日本女优中文字幕 | 九九黄色片 | 国产美女视频网站 | 国产在线播放一区二区 | 蜜桃成人无码区免费视频网站 | 中国无码人妻丰满熟妇啪啪软件 | 亚洲一区二区三区高清 | 亚洲天堂系列 | 欧美操操 | 久在线 | 亚洲精品456 | 国产精品久久久久久亚洲av | 精品少妇一区二区三区在线观看 | 日韩一级免费片 | 男女免费看| 久久人人爽爽 | 亚洲天堂一区二区三区 | 国产精品区一区二区三 | 99视频在线看 | 国产精品久久久久久人妻精品动漫 | 日韩欧美小视频 | 日本中文字幕在线视频 | 伊人日韩 | 国产女主播av | 国产六区| 欧美久久视频 | 制服丝袜av电影 | 婷婷丁香六月 | 欧美性生交xxxxx久久久缅北 | 4438x全国最大成人网 | 黄色视屏免费 | 人妻少妇久久中文字幕 | 一本色道久久综合狠狠躁 | 亚洲hhh | 特级a级片 | 欧美男女动态图 | 日韩精品在线视频观看 | 国产av剧情一区 | 欧美日韩在线国产 | 国产亚洲精品美女久久久 | 操欧洲美女 | 亚色在线视频 | 关秀媚三级 | 麻豆av在线看 | 五月天激情小说 | 欧美视频黄色 | 91全免费 | 视频一区三区 | 最新av片 | 国产精品视频在线看 | 国产乱码精品一区二区三区忘忧草 | 久久亚洲成人av | 色香蕉影院 | 美女被草出水 | 美女黄色影院 | 黑人操白妞 | 久操视频免费在线观看 | av爱爱网站 |