zoukankan      html  css  js  c++  java
  • PATA1034题解

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805456881434624

    参考:算法笔记(胡凡)10.3.1

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <map>
    using namespace std;
    const int N=2*1e3+10;
    int n,k,num=0,total=0;
    int weight[N]={0},ishead[N],gar[N][N]={0};
    bool vis[N]={0};
    map<string,int> ma;
    map<int,string> mb;
    map<int,int> hea;
    int stringtoint(string s)
    {
        if (ma.find(s)==ma.end())
        {
            ma[s]=num;
            mb[num++]=s;
            return num-1;
        }
        else
        {
            return ma[s];
        }
    }
    void findmodal(int now,int& head,int& people,int& totwei)
    {
        vis[now]=1;
        people++;
        if (weight[now]>weight[head])
        {
            head=now;
        }
        for (int i=0;i<num;i++)
        {
            if (gar[now][i]>0)
            {
                totwei+=gar[now][i];
                gar[i][now]=gar[now][i]=0;
                if (!vis[i])
                {
                    findmodal(i,head,people,totwei);
                }
            }
        }
    }
    int main()
    {
    //    freopen("in.txt","r",stdin);
        cin>>n>>k;
        string sa,sb;
        int wei;
        for (int i=0;i<n;i++)
        {
            cin>>sa>>sb>>wei;
            int ida=stringtoint(sa);
            int idb=stringtoint(sb);
            weight[ida]+=wei;
            weight[idb]+=wei;
            gar[ida][idb]+=wei;//这里要用+=,不能单单=!
            gar[idb][ida]+=wei;
        }
        for (int i=0;i<num;i++)
        {
            if (vis[i]==0)
            {
                int people=0,head=i,totwei=0;
                findmodal(i,head,people,totwei);
                if (people>2&&totwei>k)
                {
                    total++;
                    ishead[head]=people;
                }
            }
        }
        cout<<total<<endl;
        map<string,int>::iterator it;
        for (it=ma.begin();it!=ma.end();it++)
        {
            if (ishead[it->second]>0)
            {
                cout<<it->first<<" "<<ishead[it->second]<<endl;
            }
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    二维码
    struts2 result type=(chain、dispatcher、redirect、redirect-action)
    hibernate bean注解
    js uploadify
    2进制转化成字符串
    server.xml
    html css
    页面乱码
    java class 路径问题
    table th td 宽度
  • 原文地址:https://www.cnblogs.com/hemeiwolong/p/9967788.html
Copyright © 2011-2022 走看看