Codeforces Round #376 (Div. 2) C. Socks 并查集+贪心、图论

ProLightsfx 2016-10-22 146 10/22
C. Socks 并查集+贪心、图论

Source

Codeforces Round #376 (Div. 2)

 

My Solution

并查集+贪心、图论

在读入的时候直接把有边相连的点维护到一个集合里,最后对于处理出的森林,可以用map<int, map<int, int> > mp;维护,即mp[i][j]表示以 i 为根的树上颜色 j 出现的次数,

然后对于每颗树,找出树上出现的次数最多的结点颜色相同的颜色, ans += (该树的总结点数) - 出现的次数最多的结点颜色相同的颜色的结点个数

复杂度 O(n)

 

#include 
#include 
#include 


#include 
using namespace std;
typedef long long LL;
const int maxn = 2e5 + 8;

int father[maxn], _rank[maxn];
bool flag;
inline void DisjointSet(int n)
{
    for(int i = 0; i <= n; i++){
        father[i] = i;
    }
}

int _find(int v)
{
    return father[v] = father[v] == v ? v : _find(father[v]);
}

void _merge(int x, int y)
{
    int a = _find(x), b = _find(y);                //
    if(_rank[a] < _rank[b]){
        father[a] = b;
    }
    else{
        father[b] = a;
        if(_rank[a] == _rank[b]){
            _rank[a]++;
        }
    }
}

int val[maxn];
map<int, map<int, int> > mp;
map<int, int> ok;

int main()
{
    #ifdef LOCAL
    freopen("c.txt", "r", stdin);
    //freopen("c.out", "w", stdout);
    int T = 4;
    while(T--){
    #endif // LOCAL
    ios::sync_with_stdio(false); cin.tie(0);


    int n, m, k, u, v;
    cin >> n >> m >> k;
    DisjointSet(n);
    for(int i = 1; i <= n; i++){ cin >> val[i];
    }
    for(int  i = 0; i < m; i++){ cin >> u >> v;
        ok[u]++;
        ok[v]++;
        if(_find(u) != _find(v)){
            //cout << "?"; _merge(_find(u), _find(v)); } } for(auto i = ok.begin(); i != ok.end(); i++){ mp[_find(i->first)][val[i->first]]++;
    }

    int ans = 0, sum = 0, maxv = 0;
    for(auto i = mp.begin(); i != mp.end(); i++){
        sum = 0; maxv = 0;
        for(auto j = (i->second).begin(); j != (i->second).end(); j++){
            //cout << j->second << " "; sum += j->second;
            maxv = max(maxv, j->second);
        }
        //cout << endl;
        ans += (sum - maxv);
    }

    cout << ans << endl;

    #ifdef LOCAL
    mp.clear();
    cout << endl;
    }
    #endif // LOCAL
    return 0;
}

 


非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

https://www.prolightsfxjh.com/

Thank you!

                                                                                                                                             ------from ProLightsfx

- THE END -

ProLightsfx

11月15日20:28

最后修改:2024年11月15日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论