zoukankan      html  css  js  c++  java
  • pat 1034 Head of a Gang (30分)

    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<set>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    int cnt;
    map<string,int> ma1;
    map<int, string> ma2;
    
    const int N = 10005;
    int fa[N]; 
    int n, k;
    int w[N];
    int num[N];
    int ew[N];
    bool st[N];
    void init()
    {
        for (int i = 0 ; i < N; i++)
        {
            fa[i] = i;
            num[i] = 1;
            ew[i] = 0;
        }
    }
    int find(int a)
    {
        if (fa[a] == a) return a;
        else return fa[a] = find(fa[a]);
    }
    
    void unite(int a, int b, int ti)
    {
        int f1 = find(a);
        int f2 = find(b);
        if (f1 != f2)
        {
            fa[f2] = f1;
            num[f1] += num[f2];
            ew[f1] += ew[f2] + ti;
        }
    }
    int main()
    {
        cin >> n >> k;
        init();
        for (int i = 1; i <= n; i++)
        {
            string a, b; int ti;
            cin >> a >> b>> ti;
            if (ma1.count(a) == 0) ma1[a] = ++cnt,ma2[cnt] = a;
            if (ma1.count(b) == 0) ma1[b] = ++cnt,ma2[cnt] = b;
            int x = ma1[a], y = ma1[b];
            w[x] += ti, w[y] += ti;
            if (find(x) != find(y))
            {
                unite(x, y, ti);
            }
            else ew[find(x)] += ti;
        }
    
        map<int,set<pair<int,int> > > ma3;
        for (int i = 1; i <= 2*n; i++)
        {
            int x = find(i);
            if (num[x] > 2 && ew[x] > k)
                ma3[x].insert({w[i], i});
        }
        vector<string > vec;
        
        for (auto &i : ma3)
        {
            vec.push_back(ma2[(*i.second.rbegin()).second]);
        }
        
        sort(vec.begin(), vec.end());
        int len = vec.size();
        cout << len << endl;
        for (int i = 0; i < len; i++)
        {
            cout << vec[i]<< " " << num[find(ma1[vec[i]]) ]<<endl;
        }
    }
  • 相关阅读:
    【转】linux下passwd命令设置修改用户密码
    【转】Linux账号管理之useradd
    shell script练习:利用日期进行文件的创建
    [转]linux之pr命令
    [转]linux之patch命令
    [转]linux之diff 命令
    [转]linux之awk命令
    【转】Linux之printf命令
    Linux egrep命令
    [转]sed常用命令总结
  • 原文地址:https://www.cnblogs.com/hulian425/p/14085778.html
Copyright © 2011-2022 走看看