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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU - 5441 Travel 离线处理+并查集

發(fā)布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU - 5441 Travel 离线处理+并查集 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意

給我們一個圖 給出這個圖的n個點 和m個邊和權值 然后再分別給我們q個查詢 每個查詢給一個x 讓我們在這個圖中找出多少個不同的有序?qū)?使得從x到y(tǒng)的最大權值不超過x n≤20000,m≤100000,q≤5000.

分析

20000個點 1000ms 暴力肯定不行 看似這道題像是個圖論的題 嘿嘿嘿 其實。。。 我們看 如何找出符合題目條件所需要的對數(shù)呢 我們?nèi)绻麑θ我庖粋€查詢 我們對一條新的邊考慮如果這條新的邊其權值滿足當前查詢 那么就把他算進來 那么我們要繼續(xù)找邊 我們肯定不能找大的邊 因為大的邊肯定滿足不了當前查詢 所以我們還是要從小邊找起來 所以我們要對邊進行排序 然后對一個查詢 我們也最好從小的查詢搞起來 因為小查詢的結果一定滿足大查詢的結果 如果不要重復計算 我們就需要從小的查詢開始 那么這里就考慮離線處理 一個小的查詢的結果是可以轉(zhuǎn)移到大的查詢的結果 這樣可以更迅速的把q個查詢算出來 確定了這兩點 我們再看如何把一個查詢的值求出來 我們不是要枚舉邊么 那么如何才能做到有效統(tǒng)計并轉(zhuǎn)移小查詢的結果給大查詢呢? 假設我們已經(jīng)找到了好幾個符合條件的邊 有些邊是組成一個聯(lián)通塊 有些邊組成不同聯(lián)通塊 對于符合條件的聯(lián)通塊 我們一定要對這個塊進行計數(shù) 就是從這個塊中的數(shù)量中選出兩個元素來的所有可能 如果來了一條新邊 這條邊 有兩種可能1 這條邊屬于某個聯(lián)通塊2 此邊形成新的聯(lián)通塊 情況1 : 我們就需要把這條邊的新點加進去 也就是把當前新點的數(shù)量n1 * 原來聯(lián)通塊中的舊點n2 *2 (雙向) 情況2 : 那么我們就需要把這個新塊 同情況一的算法算一下 累計結果 下一次查詢可以重復利用 那么這里我們就可以考慮并查集了 對于一個并查集元素 我們記錄這個點的father 和 本塊內(nèi)的數(shù)量 初始化f = 自己 數(shù)量 = 1 沒得到一個新邊我們就查詢邊的兩頭的點的父親是否為同一個 不同就合并 并累計數(shù)量 問題就解決了 這道題還是考慮一個如何順序化考慮解 如何把符合條件的聯(lián)通塊計數(shù)問題轉(zhuǎn)化為邊的問題 如何把小查詢結果轉(zhuǎn)移到大的查詢的問題

CODE

#include<bits/stdc++.h> using namespace std; struct node{int num,f; }n[20010]; int N,M,Q,ans[5010]; struct edge{int s,e,w; }e[100010]; bool cmp(edge a,edge b){return a.w<b.w;//對于edge把權值小的放前面 } struct ques{int id,que;bool operator<(const ques &a){return que<a.que;//q值小的排前面 } }Qe[5010]; int find(int x){int j=x;while(j!=n[j].f){j = n[j].f;}int i,k=x;while(k!=n[k].f){i = n[k].f;n[k].f=j;k = i;}return j; } int main() {int t;scanf("%d",&t);while(t--){scanf("%d%d%d",&N,&M,&Q);memset(ans+1,0,sizeof(int)*Q);for(int i=1;i<=N;i++){n[i].num=1;n[i].f=i; }for(int i=1;i<=M;i++){scanf("%d%d%d",&e[i].s,&e[i].e,&e[i].w);}sort(e+1,e+1+M,cmp);for(int i=1;i<=Q;i++)scanf("%d",&Qe[i].que),Qe[i].id = i;sort(Qe+1,Qe+1+Q);int ce=1;//邊記錄位置 int cnt=0;for(int i=1; i<=Q ;i++){//枚舉q for(; ce<=M&&e[ce].w<=Qe[i].que ;ce++){// ce<=M leakint f1 = find(e[ce].s);int f2 = find(e[ce].e);if(f1!=f2){n[f2].f=f1;cnt+=n[f1].num*n[f2].num*2; n[f1].num+=n[f2].num;}} ans[Qe[i].id]+=cnt; } for(int i=1;i<=Q;i++)printf("%d\n",ans[i]);}return 0; }

總結

以上是生活随笔為你收集整理的HDU - 5441 Travel 离线处理+并查集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久国产经典视频 | a天堂视频在线观看 | 永久免费看片在线播放 | 男人的天堂色偷偷 | 自拍偷拍20p | 亚洲成人精品一区二区三区 | 国产精品热久久 | 欧美污视频在线观看 | 韩国伦理电影免费在线 | 日韩黄色片网站 | 色呦呦一区二区三区 | 琪琪在线视频 | 欧美巨大荫蒂茸毛毛人妖 | 日本免费三片在线播放 | 99精品视频免费 | 成人有色视频 | 亚洲少妇激情 | 男人的天堂黄色 | 欧美aaa在线观看 | a v免费视频 | 久久中文字幕无码 | 可以免费看的av | 精品少妇人妻av免费久久洗澡 | 337p色噜噜| 成熟丰满熟妇高潮xxxxx视频 | 91丝袜一区在线观看 | 91av视频| av网站免费在线观看 | 一区二区福利电影 | 日本少妇xxx| 久久久久久久色 | 免费精品视频在线 | 国内精品国产三级国产aⅴ久 | 国产福利在线观看 | 日日舔夜夜操 | 奇米狠狠去啦 | 黄色大片黄色大片 | www精品国产 | 色射视频 | 欧美性受xxx | 久久资源总站 | 亚洲欧美日韩一区二区三区四区 | 国产一级黄色 | aaaaa级片| 天美麻花果冻视频大全英文版 | 亚洲一二区在线 | 日韩aⅴ视频 | 国产原创精品 | 日美毛片 | 7m精品福利视频导航 | 色骚综合| 97超碰在线资源 | 中文字幕第三页 | 韩国三级做爰高潮 | 亚洲二区av| 无码日韩精品一区二区 | 青青草欧美 | 9999精品| 就去色av | 久久午夜av | 国产欧美激情 | 天堂新版8中文在线8 | 美女被啪啪 | 久久国产中文 | 国产精品99无码一区二区视频 | 欧美一区中文字幕 | 成人性生交大全免 | 日韩六十路 | 九一精品视频 | 在线综合av | 色网站在线观看 | 午夜黄色av | 激情视频亚洲 | 综合久久99 | 国产精品午夜视频 | 色呦呦网站在线观看 | 成人爱爱网站 | 国产精品破处 | av毛片在线播放 | 欧美激情电影一区二区 | 欧洲亚洲一区二区三区 | 在线视频三区 | 我们2018在线观看免费版高清 | 中国亚洲女人69内射少妇 | 干爹你真棒插曲免费 | 69久久| 奇米影视色| 爱爱综合网 | 中国人与拘一级毛片 | 日韩干| 高清成人 | 日韩视频一区二区三区在线播放免费观看 | 欧美精品黑人猛交高潮 | 久久中出 | 人妻丝袜一区二区三区 | 韩国一区二区三区视频 | av噜噜在线| 九九视频免费观看 | 99成人精品 |