zoukankan      html  css  js  c++  java
  • CF #376 (Div. 2) C. dfs

    1、CF #376 (Div. 2)    C. Socks       dfs

    2、题意:给袜子上色,使n天左右脚袜子都同样颜色。

    3、总结:一开始用链表存图,一直TLE test 6 

    (1)如果需要高效的随即存取,而不在乎插入和删除的效率,使用vector 。

    (2)如果需要大量的插入和删除,而不关心随即存取,则应使用list 。

    #include<bits/stdc++.h>
    #define F(i,a,b) for (int i=a;i<b;i++)
    #define FF(i,a,b) for (int i=a;i<=b;i++)
    #define mes(a,b) memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    #define LL long long
    #define pb push_back
    using namespace std;
    const int N=200100,MAX=1000100;
    
    int n,m,k,vis[N],col[N],sum,sum1,maxn;
    map<int ,int >M;
    vector<int >G[N];
    
    void dfs(int u)
    {
        vis[u]=1;   M[col[u]]++;
        //sum++;    //直接在map::M上遍历时间会优化一点
        //if(maxn<M[col[u]]) maxn=M[col[u]];
        for(int v:G[u]) if(!vis[v]) {   //才发现for可以这样简写
            dfs(v);
        }
    }
    
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        FF(i,1,n) scanf("%d",&col[i]);
        int l,r;
        FF(i,1,m) {
            scanf("%d%d",&l,&r);
            G[l].pb(r); G[r].pb(l);
        }
        mes(vis,0);  sum1=0;
        FF(i,1,n) if(!vis[i]) {
            M.clear();
            sum=maxn=0;
            dfs(i);
            for(auto p:M){
                sum+=p.second;
                if(maxn<p.second) maxn=p.second;
            }
            sum1+=(sum-maxn);
        }
        cout<<sum1<<endl;
    
        return 0;
    }
    View Code
  • 相关阅读:
    2020软件工程作业01
    2020软件工程—06—个人作业
    团队二次作业
    软件工程作业05
    软件工程作业00--问题清单
    软件工程作业04二期
    2020软件工程作业04
    oracle11安装过程中常出现的问题和解决办法
    2020软件工程作业03
    2020软件工程作业02
  • 原文地址:https://www.cnblogs.com/sbfhy/p/5998909.html
Copyright © 2011-2022 走看看