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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【启发式合并】梦幻布丁(金牌导航 启发式合并-1/luogu 3201)

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【启发式合并】梦幻布丁(金牌导航 启发式合并-1/luogu 3201) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

夢幻布丁

金牌導航 啟發式合并-1

luogu 3201

題目大意

有若干個布丁,給出它們的顏色,每次將一個顏色的所有布丁變成另一種顏色,然后詢問有多少段連續的數

輸入樣例

4 3 1 2 2 1 2 1 2 1 2

輸出樣例

3 1

樣例解釋

初始時布丁顏色依次為 1,2,2,1,三段顏色分別為 [1,1], [2,3], [4,4]
一次操作后,布丁的顏色變為1,1,1,1,只有[1,4]一段顏色

數據范圍

1?n,m?105,1?ai,x,y?1061 \leqslant n, m \leqslant 10^5,1 \leqslant a_i ,x, y \leqslant 10^61?n,m?105,1?ai?,x,y?106

提示

請注意,不保證顏色的編號不大于 n,也不保證 x≠yx \neq yx?=y,m 不是顏色的編號上限

解題思路

如果每次暴力查詢時間O(nm)O(nm)O(nm),會TLETLETLE
對于每次合并,考慮把小的合并到大的中,這樣可以有效降低時間
對于集合AAA,如果和BBB合并(∣A∣?∣B∣)(|A|\leqslant|B|)(A?B),那么AAA所在集合大小變為∣A∣+∣B∣|A|+|B|A+B,變大了一倍,所以集合∣A∣|A|A最多合并lognlognlogn次,nnn個集合時間為O(nlogn)O(nlogn)O(nlogn)
對于更改顏色,可以用一個b數組存下第i種顏色存在第幾個顏色中,這樣可以O(1)實現交換兩個子集,就可以使小的合并到大的中

代碼

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define N 100010 using namespace std; int n, m, x, y, ans, s[N*10], b[N*10], st[N*10], nx[N], head[N*10], color[N]; void add(int x, int y)//加入點 {b[x] = x;//初始存在自己if (!head[x]) st[x] = y;//第一條邊nx[y] = head[x];head[x] = y;s[x]++; } void solve(int x, int y) {for (int i = head[x]; i; i = nx[i]){if (y == color[i - 1]) ans--;//相同就合并了,數量-1if (y == color[i + 1]) ans--;}for (int i = head[x]; i; i = nx[i])color[i] = y;//、、變色s[y] += s[x];//累加nx[st[y]] = head[x];//連在該子集后面st[y] = st[x];head[x] = s[x] = st[x] = 0; } int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; ++i){scanf("%d", &color[i]);if (color[i] != color[i - 1]) ans++;add(color[i], i);}while(m--){scanf("%d", &x);if (x == 2) printf("%d\n", ans);else{scanf("%d%d", &x, &y);if (x == y) continue;if (s[b[x]] > s[b[y]]) swap(b[x], b[y]);//小的合并到大的if (!s[b[x]]) continue;solve(b[x], b[y]);}}return 0; }

總結

以上是生活随笔為你收集整理的【启发式合并】梦幻布丁(金牌导航 启发式合并-1/luogu 3201)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 午夜影院 | 亚洲欧美在线一区二区 | 中文字幕在线一 | 在线观看网址你懂的 | 91国内视频 | 欧美夜夜 | 日本在线视频观看 | 免费日韩精品 | 日本男人的天堂 | 国产精品18久久久久久无码 | 国产精品无套 | 欧美 亚洲 另类 激情 另类 | 欧美性视频在线 | h成人在线 | 黑人巨大精品人妻一区二区 | 国产女主播在线一区二区 | 手机在线中文字幕 | 日韩激情片 | 中文在线天堂网 | 成人在线观看18 | 国模少妇一区二区三区 | 新版天堂资源中文8在线 | 农夫色综合 | 又色又爽又黄无遮挡的免费视频 | 免费看的av网站 | 久久人妻一区二区 | www.爱色av.com | 男人的天堂2018| 国产精彩视频 | 99久久久无码国产精品 | 人妻精品一区二区在线 | 一级全黄裸体免费观看视频 | 中文文字幕一区二区三三 | 未满十八18禁止免费无码网站 | 黄色av网页| 久久精品一本 | 国产深喉视频一区二区 | 制服丝袜天堂 | 国产精品熟女一区二区不卡 | 天天操天天弄 | 欧美另类v| 久久精品网址 | 日韩欧美中文字幕一区二区三区 | 大陆熟妇丰满多毛xxxⅹ | 国产日韩欧美电影 | 影院一区| 久久ww| 久久精品国产一区二区电影 | 国产h视频在线 | 视频丨9l丨白浆 | 亚洲男人在线天堂 | 一区二区三区四区视频在线观看 | av中字在线 | 91调教视频 | 国产精品久久久久久久久久久不卡 | 欧美日韩免费一区 | 欧美,日韩,国产在线 | 一本在线免费视频 | 欧美性猛交xxx乱大交3蜜桃 | 九热精品 | 亚洲成人精品在线 | 丰满放荡岳乱妇91ww | 玖玖爱在线精品视频 | 亚洲无吗一区二区三区 | 欧美精品自拍 | 国产精品毛片一区 | www.色图 | 综合精品| 不许穿内裤随时挨c调教h苏绵 | 视频在线观看网站免费 | 污视频91 | 国产51精品 | 亚洲免费区 | www.av在线免费观看 | 性视频在线播放 | 性高跟鞋xxxxhd国产电影 | 伊人色影院 | 成人福利av | 绝顶高潮videos合集 | 天堂a√在线 | 女人一级一片30分 | 亚洲AV无码成人精品区东京热 | 伊人中文网 | 日韩精品亚洲一区 | 亚洲狼人综合 | 狠狠成人 | 午夜精品在线播放 | 亚洲国产综合网 | 性欧美videos另类艳妇3d | 手机看片1024日韩 | 一级色视频| 免费成人精品 | 久久久精品免费看 | 国产视频h | 午夜黄色小视频 | 人人妻人人澡人人爽人人欧美一区 | 黑人精品一区二区三区 | 亚洲美免无码中文字幕在线 | 福利在线看|