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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

编程问答

网络分析(带权并查集)

發(fā)布時(shí)間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络分析(带权并查集) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

網(wǎng)絡(luò)分析

題意:

有n個(gè)節(jié)點(diǎn),一開(kāi)始彼此獨(dú)立,有兩個(gè)操作,第一個(gè)操作時(shí)是連接兩個(gè)節(jié)點(diǎn),第二個(gè)操作是對(duì)一個(gè)節(jié)點(diǎn)+x,(在進(jìn)行第二個(gè)操作時(shí),與該點(diǎn)相連的點(diǎn)也會(huì)+x)
問(wèn)每個(gè)節(jié)點(diǎn)的權(quán)值

題解:

帶權(quán)并查集
我所理解的帶權(quán)并查集是這樣的,就是把所有權(quán)值全部加到父親節(jié)點(diǎn),在路徑壓縮的情況下,一個(gè)并查集里的權(quán)值全部移動(dòng)到根節(jié)點(diǎn),相當(dāng)于整個(gè)并查集共享整個(gè)權(quán)值,但是有的節(jié)點(diǎn)是在其他節(jié)點(diǎn)被加后再加入并查集的,也就是共享的并查集并不全歸子節(jié)點(diǎn),所以子節(jié)點(diǎn)x的值為d[px]=value[px] - value[py]
px為x的根節(jié)點(diǎn),py為y的根節(jié)點(diǎn),x與y相連
數(shù)組value[x]表示以x為根節(jié)點(diǎn)的并查集共享的權(quán)值
數(shù)組d[x]表示x節(jié)點(diǎn)相對(duì)于根節(jié)點(diǎn)的權(quán)值的差值

代碼:

#include <iostream> using namespace std; const int N = 4E4 + 10; int parent[N], value[N], d[N]; int n, m; int find(int x){if(parent[x] != x){int root = find(parent[x]);d[x] += d[parent[x]];parent[x] = root;}return parent[x]; } int main(){cin >> n >> m;for(int i = 1; i <= n; i ++ ) parent[i] = i;while(m -- ){int op, x, y; cin >> op >> x >> y;if(op == 1){int px = find(x), py = find(y);if(px == py) continue;d[px] += value[px] - value[py];parent[px] = py;}else{int px = find(x);value[px] += y;}}for(int i = 1; i <= n; i ++ ) cout << value[find(i)] + d[i] << ' ';return 0; }

總結(jié)

以上是生活随笔為你收集整理的网络分析(带权并查集)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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