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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CodeForces - 786BLegacy——线段树建图+最短路

發布時間:2023/11/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 786BLegacy——线段树建图+最短路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目描述】
CodeForces - 786BLegacy

【題目分析】
題目大概意思就是有三種操作:

  • 從某個點到另一個點
  • 從某個點到另一個區間
  • 從某個區間到另一個點
  • 然后詢問從其中一個點到其他所有點的距離——這很顯然是一個求單源最短路徑的。我們簡單的想法顯然是建一個圖,每次操作就進行暴力連邊,反正也沒有修改。可是復雜度不允許。
    我們再觀察一下操作:對區間的操作,這讓我們不由得想起了線段樹,畢竟線段樹可是區間神器,可是就算用了線段樹,我們能做些什么呢?
    線段樹是保存區間信息的數據結構,我們對于從點到區間的關系,不妨修改為從點到線段樹節點的關系,然后再使線段樹節點和他們的葉子節點之間本來就帶有一條路徑,那么從一個點到另一個區間的關系就這樣被簡化為從一個點到幾個點的關系,可以有效降低復雜度。
    具體做法就是在建樹的過程中就讓每個線段樹節點和他們的葉子節點之間含有一條權值為0的有向邊。
    之所以是有向邊是因為從點到區間的關系有兩種,我們得建立兩種線段樹,分別是從父節點指向葉子節點和從葉子結點指向根節點,對應的是從點到區間和從區間到點的關系。而且兩個線段樹的葉子節點,也就是最下面的節點指向的都是原來區間的節點,這樣就在原來的區間上建立了從點到區間再從區間到點的關系。詳細情況可以看一下另一位大佬博主的圖

    這個圖是進行了三個操作:
    1 2 3 3 節點2到節點3有一條權值為3的邊(藍色)
    2 1 2 4 2 節點1到區間[2,4]有權值為2的邊(黃色)
    3 4 1 3 1 區間[1,3]到節點4有權值為1的邊(紅色)
    再在這張圖上跑最短路(因為有0邊,最好還是用SPFA)
    【AC代碼】

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> #include<queue> #include<set> #include<climits> #include<cstdlib> #include<cmath>using namespace std;typedef long long ll;const int MAXN=100005; const ll INF=0x3f3f3f3f3f3f3f3f; int head[MAXN<<2],ls[MAXN<<2],rs[MAXN<<2]; int root1,root2,tot,cnt; struct edge {int v,w,next; }edge[MAXN*20]; ll dis[MAXN<<2]; queue<int> q;inline void AddEdge(int u,int v,int w) {edge[++tot].v=v; edge[tot].w=w; edge[tot].next=head[u]; head[u]=tot; }void build1(int &k,int l,int r) {if(l==r){k=l; return;}k=++cnt;int mid=(l+r)>>1;build1(ls[k],l,mid); build1(rs[k],mid+1,r);AddEdge(k,ls[k],0); AddEdge(k,rs[k],0); }void build2(int &k,int l,int r) {if(l==r){k=l; return;}k=++cnt;int mid=(l+r)>>1;build2(ls[k],l,mid); build2(rs[k],mid+1,r);AddEdge(ls[k],k,0); AddEdge(rs[k],k,0); }void update1(int k,int l,int r,int x,int L,int R,int w) {if(l>=L && r<=R){AddEdge(x,k,w);return;}int mid=(l+r)>>1;if(L<=mid) update1(ls[k],l,mid,x,L,R,w);if(R>mid) update1(rs[k],mid+1,r,x,L,R,w); }void update2(int k,int l,int r,int x,int L,int R,int w) {if(l>=L && r<=R){AddEdge(k,x,w);return;}int mid=(l+r)>>1;if(L<=mid) update2(ls[k],l,mid,x,L,R,w);if(R>mid) update2(rs[k],mid+1,r,x,L,R,w); }void SPFA(int s) {memset(dis,0x3f,sizeof(dis));dis[s]=0; q.push(s);while(!q.empty()){int u=q.front(); q.pop();for(int i=head[u];i;i=edge[i].next){int v=edge[i].v,w=edge[i].w;if (dis[u]+w<dis[v]) dis[v]=dis[u]+w,q.push(v);}} }int main() {int n,m,s;int cmd,l,r,v,w,u;scanf("%d%d%d",&n,&m,&s);cnt=n; tot=0;build1(root1,1,n); build2(root2,1,n);for(int i=0;i<m;i++){scanf("%d",&cmd);if(cmd==1){scanf("%d%d%d",&u,&v,&w);AddEdge(u,v,w);}else{scanf("%d%d%d%d",&v,&l,&r,&w);if(cmd==2)update1(root1,1,n,v,l,r,w);elseupdate2(root2,1,n,v,l,r,w);}}SPFA(s);for(int i=1;i<=n;i++){cout<<(dis[i]<INF?dis[i]:-1)<<" ";}return 0; }

    總結

    以上是生活随笔為你收集整理的CodeForces - 786BLegacy——线段树建图+最短路的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 熟妇人妻无乱码中文字幕真矢织江 | 欧美片17c07.com| 女同性做受全过程动图 | 在线观看国产福利 | 久久成人a| 日韩欧美区 | 欧美日韩h | 久久久精品欧美 | 亚洲精品视频播放 | 9i精品福利一区二区三区 | 久久综合激的五月天 | 9久9久9久女女女九九九一九 | 国产成人短视频 | 欧美在线观看视频一区 | 天堂va蜜桃一区二区三区漫画版 | 精品国产乱码久久久久久108 | 日本在线观看a | 女人张开腿让男人桶爽 | 优优色影院 | 少妇25p| 91手机在线视频 | 岳乳丰满一区二区三区 | 欧美色激情 | 黄色的网站在线观看 | 国产男女猛烈无遮挡免费视频 | 午夜香蕉 | 黄色小视频免费网站 | 91porny九色91啦中文 | 精品久久一区二区三区 | 日本在线加勒比 | 就操网 | 国产精品高潮呻吟久久av野狼 | 久久久久久国产精品免费免费 | 波多野结衣一区二区三区在线 | 特级毛片a | 超碰成人网 | 日本色视频 | 精品毛片在线观看 | 成人免费观看视频网站 | 色网网站| 懂色一区二区三区免费观看 | 色婷婷av一区二区 | 亚洲日本视频 | 在线一区二区观看 | 91精品91| 爱爱网视频 | 台湾极品xxx少妇 | 日韩av资源 | 欧美夜夜夜 | 成人天堂av | 日韩www视频| 美女视频一区二区 | 久久精品一区二区三 | 精品久久久久久久久久久久 | 一本之道av | 欧美高清在线 | 爱射综合 | 无码人妻丰满熟妇啪啪网站 | 精品久久久久久久久久久久久久久 | 九九热免费精品视频 | 伊人影院在线播放 | 国产精品人人做人人爽人人添 | 91中文国产 | 日本黄色一级网站 | 999av视频 | 在线亚洲人成电影网站色www | 精品在线一区二区 | 少妇导航av | 日韩亚洲天堂 | 中文字幕一区二区在线播放 | 亚洲国产一区二区a毛片 | 亚洲av综合色区无码二区爱av | 国产福利免费在线观看 | 国产精品久久久久久久妇 | 中文字幕在线免费观看视频 | 人妻互换免费中文字幕 | 日韩夜夜 | 免费国产黄色片 | 国产精品一区在线观看 | 日韩精品免费一区二区三区 | 爱爱网站视频 | 伊人91视频| av不卡在线 | 亚洲欧美日本一区 | 日韩二区视频 | 亚洲色图第1页 | 美女扒开屁股让男人桶 | 欧美激情性做爰免费视频 | 我的好妈妈在线观看 | 狠狠艹| 欧美性猛交aaaa片黑人 | 无码人妻精品一区二区三区99v | 亚洲v欧美 | 国产日韩在线视频 | 亚洲网站av | 淫辱的世界(调教sm)by | 天天草天天射 | 黄网在线免费看 | 亚洲资源网站 |