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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P4768-[NOI2018]归程【kruskal重构树,最短路】

發(fā)布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P4768-[NOI2018]归程【kruskal重构树,最短路】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正題

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


題目大意

nnn個點(diǎn)mmm條邊的無向圖,然后每條邊有水位和長度。

每次詢問一個(v,w)(v,w)(v,w)表示從vvv點(diǎn)出發(fā)走高度超過www的路徑到達(dá)一個點(diǎn)xxx使得x~1x\sim1x1的最短路最短。


解題思路

先用DijDijDij跑出111的單源最短路,然后邊權(quán)從大到小排序建立一顆KruskalKruskalKruskal重構(gòu)樹,這樣的話如果一個權(quán)值為valvalval的點(diǎn)的子樹表示在這顆子樹中走權(quán)值大于valvalval的點(diǎn)的話這棵子樹中任意點(diǎn)之間可以相互到達(dá)。

所有我們每個點(diǎn)維護(hù)子樹中最小的最短路,然后對于詢問點(diǎn)用倍增跳到滿足條件的最上面的節(jié)點(diǎn)就好了。


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define ll long long using namespace std; const ll N=800010; struct edge_node{ll x,y,w; }e[N]; struct node{ll to,next,w; }a[N]; struct point_node{ll pos,dis; }; bool operator<(point_node x,point_node y) {return x.dis>y.dis;} priority_queue<point_node> q; ll n,m,Q,k,s,cnt,tot,lastans,T; ll fa[N],f[N],g[N][25],val[N],ls[N]; bool v[N]; void addl(ll x,ll y,ll w) {a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w; } bool cmp(edge_node x,edge_node y) {return x.w>y.w;} void dij(){q.push((point_node){1,0});memset(v,0,sizeof(v));memset(f,127,sizeof(f));f[1]=0;while(!q.empty()){ll x=q.top().pos;q.pop();if(v[x]) continue;v[x]=1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(f[x]+a[i].w<f[y]){f[y]=f[x]+a[i].w;if(!v[y])q.push((point_node){y,f[y]});}}}return; } ll find(ll x) {return (x==fa[x])?x:(fa[x]=find(fa[x]));} void dfs(ll x) {for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;g[y][0]=x;dfs(y);f[x]=min(f[x],f[y]);} } ll up(ll x,ll p){for(ll i=24;i>=0;i--)if(val[g[x][i]]>p) x=g[x][i];return x; } void work() {scanf("%lld%lld",&n,&m);for(ll i=1;i<=m;i++){ll w;scanf("%lld%lld%lld%lld",&e[i].x,&e[i].y,&w,&e[i].w);addl(e[i].x,e[i].y,w);addl(e[i].y,e[i].x,w);}dij();tot=0;memset(ls,0,sizeof(ls));sort(e+1,e+1+m,cmp);for(ll i=1;i<=n+m;i++)fa[i]=i;cnt=n;for(ll i=1;i<=m;i++){ll fx=find(e[i].x),fy=find(e[i].y);if(fx!=fy){val[++cnt]=e[i].w;fa[fx]=cnt;fa[fy]=cnt;addl(cnt,fx,0);addl(cnt,fy,0);}}dfs(find(1));for(ll i=1;i<25;i++)for(ll j=1;j<=cnt;j++)g[j][i]=g[g[j][i-1]][i-1];scanf("%lld%lld%lld",&Q,&k,&s);lastans=0;while(Q--){ll v,p;scanf("%lld%lld",&v,&p);v=(v+k*lastans-1)%n+1;p=(p+k*lastans)%(s+1);printf("%lld\n",lastans=f[up(v,p)]);} } int main() {scanf("%lld",&T);while(T--){memset(ls,0,sizeof(ls));memset(val,0,sizeof(val));memset(g,0,sizeof(g));tot=0; work();} }

總結(jié)

以上是生活随笔為你收集整理的P4768-[NOI2018]归程【kruskal重构树,最短路】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 夜夜嗨老熟女av一区二区三区 | 欧美三区在线观看 | 99久久久无码国产精品性青椒 | 成人日批视频 | a√在线视频 | 国产a国产片 | 久久综合久久综合久久综合 | 丰满少妇被猛烈进入无码 | 又黄又爽视频在线观看 | 夜夜狠| 国产一级片精品 | 精品一区二区国产 | 日韩黄色一级大片 | 日韩中文字幕一区二区三区 | 国模人体一区二区 | 国产福利视频导航 | 一级特黄aaa | 天天草av | 国产又粗又猛 | 日本免费在线视频 | 青青青青青草 | 狠狠澡| 手机在线免费看av | yy4138理论片动漫理论片 | 揄拍成人国产精品视频 | 久草免费在线播放 | 国产一区二区小说 | 看av的网址 | 高清一区二区三区四区五区 | 天天干夜夜爱 | 成人免费视频网 | 免费三级网 | аⅴ天堂中文在线网 | 亚洲天堂麻豆 | bl动漫在线观看 | 午夜性色| 国产91一区在线精品 | 豆花免费跳转入口官网 | 日韩久久一区二区三区 | 国产一极片 | 波多野结衣影片 | 国产又粗又硬又长又爽的演员 | 中文av一区二区三区 | 欧美日韩中文在线 | 一级片小视频 | 国产女人18水真多毛片18精品 | 欧美性xxxxx极品娇小 | 亚洲午夜精品久久久久久人妖 | 国产做受69| 欧美一区二区三区日韩 | 91在线中文字幕 | 在线观看污污视频 | 亚洲视频一二三四 | 啪啪网站免费看 | 久久久久久亚洲 | 狠狠操在线观看 | 天天综合网在线 | 日本xxxxxwwwww| 日本精品999| 成人黄色短视频在线观看 | 久久久久久亚洲av无码专区 | 欧亚在线视频 | 国产精品日韩电影 | 精品一区二区三区视频在线观看 | 污污视频在线观看网站 | 999超碰| 性一交一乱一伧老太 | ass日本粉嫩pics珍品 | 大桥未久中文字幕 | 日日骑| 四虎影视成人永久免费观看亚洲欧美 | av导航大全 | 亚洲国产精品综合 | 国产欧美日韩综合精品一区二区三区 | 日韩精品播放 | 男女作爱网站 | caoporn视频在线观看 | 成人18视频在线观看 | 狠狠干狠狠操 | 一二三av | 在线观看视频二区 | 一级黄色性生活片 | sese国产 | 欧美在线不卡视频 | 天堂av在线中文 | 免费黄色在线视频 | 中文字幕乱码一区二区 | 女人扒开腿让男人捅爽 | 色悠悠网 | 国产巨乳在线观看 | 91视频在线看| 黄色wwww| 午夜视频日韩 | 久久久久少妇 | 裸体的日本在线观看 | 在线免费观看视频a | 国产freexxxx性播放麻豆 | 久久亚洲综合网 | 亚洲成人毛片 |