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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu 4496 并查集 逆向 并查集删边

發(fā)布時間:2024/4/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 4496 并查集 逆向 并查集删边 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
貌似某大犇說過 正難則反,,, 題目說要對這張圖進行刪邊,然后判斷聯(lián)通塊的個數(shù),那么就可以先把所有邊都刪掉,之后從后往前加邊,若加的邊兩端點不在同一個聯(lián)通塊中, 那么此時聯(lián)通快個數(shù)少一,否則不變 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 const int maxn = 10000 + 500; 6 const int maxm = 100000 + 5000; 7 int father[maxn]; 8 int x1[maxm], x2[maxm]; 9 int ans[maxm]; 10 int n, m; 11 12 13 int getfather(int x) { 14 if (father[x] == x) return (x); 15 return (father[x] = getfather(father[x])); 16 } 17 18 int main () { 19 while(scanf("%d %d", &n, &m) != EOF) { 20 memset(ans, 0, sizeof(ans)); 21 for (int i = 1; i <= n; i++) father[i] = i; 22 for (int i = 1; i <= m; i++) { 23 scanf("%d %d", &x1[i], &x2[i]); 24 x1[i] += 1; 25 x2[i] += 1; 26 } 27 ans[m] = n; 28 for (int i = m; i >= 1; i--) { 29 int tx = getfather(x1[i]); 30 int ty = getfather(x2[i]); 31 if (tx != ty) { 32 ans[i-1] = ans[i] - 1; 33 father[tx] = ty; 34 } else { 35 ans[i-1] = ans[i]; 36 } 37 } 38 for (int i = 1; i <= m; i++) printf("%d\n", ans[i]); 39 } 40 return 0; 41 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/CtsNevermore/p/5990794.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的hdu 4496 并查集 逆向 并查集删边的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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