zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) 1034. Head of a Gang (30)

    简单DFS。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<string>
    #include<queue>
    #include<stack>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    
    const int maxn=2000+10;
    map<string,int>m1;
    map<int,string>m2;
    int n,k,tot;
    
    struct Edge
    {
        int u,v,val;
    }e[maxn];
    
    struct Ans
    {
        string name;
        int cnt;
    }ans[maxn];
    int num;
    
    vector<int>g[maxn];
    int flag[maxn];
    int Block;
    int cnt[maxn];
    
    void dfs(int x)
    {
        num++; flag[x]=Block;
        for(int i=0;i<g[x].size();i++)
        {
            if(flag[g[x][i]]!=0) continue;
            dfs(g[x][i]);
        }
    }
    
    bool cmp(const Ans&a,const Ans&b){return a.name<b.name;}
    
    int main()
    {
        scanf("%d%d",&n,&k); tot=0;
        memset(flag,0,sizeof flag);
        memset(cnt,0,sizeof cnt);
        for(int i=1;i<=n;i++)
        {
            string a,b; cin>>a>>b>>e[i].val;
            if(m1[a]==0)
            {
                m1[a]=++tot;
                m2[tot]=a;
            }
            if(m1[b]==0)
            {
                m1[b]=++tot;
                m2[tot]=b;
            }
            e[i].u=m1[a];
            e[i].v=m1[b];
            cnt[e[i].v]+=e[i].val;
            cnt[e[i].u]+=e[i].val;
            g[e[i].u].push_back(e[i].v);
            g[e[i].v].push_back(e[i].u);
        }
    
        num=0;
        int t=0;
        for(int i=1;i<=tot;i++)
        {
            if(flag[i]!=0) continue;
            Block++; num=0; dfs(i);
            if(num<=2) continue;
            int sum=0;
            for(int j=1;j<=n;j++)
                if(flag[e[j].u]==Block&&flag[e[j].v]==Block)
                    sum=sum+e[j].val;
            if(sum<=k) continue;
    
            int id,Max=-1;
            for(int j=1;j<=tot;j++)
                if(flag[j]==Block&&cnt[j]>Max)
                    Max=cnt[j],id=j;
    
            ans[t].name=m2[id];
            ans[t].cnt=num;
            t++;
        }
    
        sort(ans,ans+t,cmp);
    
        printf("%d
    ",t);
        for(int i=0;i<t;i++)
            cout<<ans[i].name<<" "<<ans[i].cnt<<endl;
    
        return 0;
    }
  • 相关阅读:
    Spark 分布式环境---slave节点无法启动(已解决)
    Hadoop 分布式环境slave节点重启忽然不好使了
    Spark 2.2.0 分布式集群环境搭建
    arm-linux-gcc
    VS+QT创建一个OpenCV应用
    QT安装和vs2015使用
    DE1_MSEL
    Hog实例
    resize函数
    Hog特征
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5515740.html
Copyright © 2011-2022 走看看