4075. 染色 并查集的运用 并查集运用的小细节
生活随笔
收集整理的這篇文章主要介紹了
4075. 染色 并查集的运用 并查集运用的小细节
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
題解思路
這題思路還是比較明顯的,將顏色需要相同的氣球全部并查起來,在搜索集合中顏色最多的顏色,將其他的也染成這個。這樣貪心就能保證使用的染色最少。
時間復雜度為On,看起來這樣復雜很高,實際上每個點之會屬于一個集合,所以每個點只走了一次。
兩端代碼的不同讓我找了好久的bug。
if ( a[i] == i ){vector <int> pk ; vis[i] = cnt ;pk.push_back(b[i]) ; cnt ++ ; head.push_back(pk) ; } if ( find(i) == i ){vector <int> pk ; vis[i] = cnt ;pk.push_back(b[i]) ; cnt ++ ; head.push_back(pk) ; }當驗證父節點關系的時候必須用find函數,不能直接判斷。
因為
這種情況下2號節點根本來不及路徑壓縮,所以當驗證父節點的時候必須用find函數來驗證
之前想過這種情況,因為在uio()加個find(y)就行,這里只想了2連3,卻沒想到1連3這種情況。
AC代碼
#include <bits/stdc++.h> //#include <unordered_map> //priority_queue #define PII pair<int,int> #define ll long longusing namespace std;const int INF = 0x3f3f3f3f; const int N = 200100 ; int n , m , k ; int a[N] ; int b[N] ; vector <vector <int> >head ; int vis[N] ; int find(int x ) {if ( x != a[x] )return a[x] = find(a[x]) ; return a[x] ; } void uio(int x , int y ) {int fx = find(x) ;int fy = find(y) ;if (fx != fy ){a[fy] = fx ; find(y) ; } } int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m >> k ; for (int i = 1 ; i <= n ; i++ )a[i] = i ; for (int i = 1 ; i <= n ; i++ )cin >> b[i] ; for (int i = 1 ; i <= m ; i++ ){int t1 , t2 ;cin >> t1 >> t2 ;uio( t1 , t2 ) ;}int cnt = 0 ; for (int i = 1 ; i <= n ; i++ ){if ( find(i) == i ){vector <int> pk ; vis[i] = cnt ;pk.push_back(b[i]) ; cnt ++ ; head.push_back(pk) ; }}for (int i = 1 ; i <= n ; i++ ){if (find(i) != i ){head[vis[a[i]]].push_back(b[i]) ; }}int ans = 0 ; /*for (int i = 0 ; i < head.size() ; i++ ) {for (int j = 0 ; j < head[i].size() ; j++ )cout << head[i][j] << " " ;cout << "\n" ; }*/for (int i = 0 ; i < head.size() ; i++ ){int ma = 0 ; unordered_map <int ,int > mp ; for (int j = 0 ; j < head[i].size() ; j++ ){mp[head[i][j]]++ ;}for (int j = 0 ; j < head[i].size() ; j++ ){ma = max(ma , mp[head[i][j]] );}if (head[i].size()){int sz = head[i].size() ; ans += sz - ma ; }}cout << ans << "\n" ; return 0 ; }總結
以上是生活随笔為你收集整理的4075. 染色 并查集的运用 并查集运用的小细节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉的监控系统研究现状,智能监控国
- 下一篇: 解密 Google Glass