• codeforces 731C(DFS)


    题目链接:http://codeforces.com/contest/731/problem/C

    题意:有n只袜子(1~n),k种颜色(1~k),在m天中,左脚穿下标为l,右脚穿下标为r的袜子,问最少修改几只袜子的颜色,可以使每天穿的袜子左右两只都同颜色。

    好恶心的袜子,一会儿看成改袜子的颜色,一会儿看成改l,r的颜色,一会下标看混......不过,菜是原罪=_=

    思路:先建图,在每个连通分支中,把所有袜子的颜色都改成出现颜色次数最多的那个颜色,即该分支节点个数 - 最多出现次数

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 2e5 + 10;
    int c[N];
    bool vis[N];
    vector <int> G[N];
    map <int,int> num;
    int cur,maxm;
    void dfs(int x)
    {
        if(vis[x])
            return;
        cur++;
        maxm = max(maxm,++num[c[x]]);
        vis[x] = 1;
        for(int i = 0; i < G[x].size(); i++)
            dfs(G[x][i]);
    }
    int main()
    {
        int n,m,k,ans = 0;
        scanf("%d %d %d",&n,&m,&k);
        for(int i = 1; i <= n; i++)
            scanf("%d",c+i);
        for(int i = 1; i <= m; i++)
        {
            int l,r;
            scanf("%d %d",&l,&r);
            G[l].push_back(r);
            G[r].push_back(l);
        }
        for(int i = 1; i <= n; i++)
        {
            cur = maxm = 0;
            dfs(i);
            ans += cur - maxm;
            num.clear();
        }
        printf("%d
    ",ans);
        return 0;
    }
    


  • 相关阅读:
    java的堆和栈
    概率题
    并发复习在回顾
    hashmap和hashtable
    StringBuilder和StringBuffer
    WinSCP 工具
    网络桥接注意问题。
    虚拟机网络设置
    Spring任务计划
    Spring任务执行器(TaskExecutor)
  • 原文地址:https://www.cnblogs.com/westwind1005/p/5975178.html
Copyright © 2020-2023  润新知