zoukankan      html  css  js  c++  java
  • Mutual Training for Wannafly Union #6 E

    题目链接:http://www.spoj.com/problems/IAPCR2F/en/

    题目大意:

    给m个数字代表的大小,之后n组数据,两两关联,关联后的所有数字为一组,从小到大输出组数以及对应的组数数字和.

    解题思路:

    很明显一个并查集,5个月前的这场比赛,过三四题的人不少,其实有3题是大众题,这题当时知道是并查集,可是当时对其理解不深,没A掉.现在回头来补题,用数组存储莫名WA,改用vector玄学AC。下次回头来看应该又用不一样的感受吧!

    丑代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <cmath>
    #include <cstring>
    #include <iostream>
    #include<algorithm>
    #include <queue>
    #include <map>
    #include <vector>
    #include <cmath>
    #define INF 0x3f3f3f3f
    using namespace std;
    #define maxn 2000
    #define LL long long
    #define inf 0x3f3f3f3f
    //************************************************
    int pre[maxn],sum[maxn],num[maxn];
    int cmp(int a,int b)
    {
        return a>b;
    }
    int find(int x)
    {
        /*int root,temp;
        root=x;
        while(root!=pre[root])
            root=pre[root];
        while(x!=root)
        {
            temp=pre[x];
            pre[temp]=root;
            x=temp;
        }
        return root;*/
        return  x==pre[x]?x: pre[x]=find(pre[x]);
    }
    void join(int x,int y)
    {
        int fx=find(x),fy=find(y);
        if(fx!=fy)  pre[fx]=fy;
    }
    int main()
    {
        int t,m,n,a,b,k=1;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&m,&n);
            for(int i=1; i<=m; i++)
            {
                scanf("%d",&num[i]);
                pre[i]=i;
                sum[i]=0;
            }
            for(int i=1; i<=n; i++)
            {
                scanf("%d%d",&a,&b);
                join(a,b);
            }
            for(int i=1; i<=m; i++)    sum[find(i)]+=num[i];
            vector<int>Q;
            for(int i=1; i<=m; i++)
            {
                if(sum[i])  Q.push_back(sum[i]);
            }
            sort(Q.begin(),Q.end());
            printf("Case %d: %d
    ",k++,Q.size());
            for(int i=0; i<Q.size(); i++) printf("%d%c",Q[i],i==Q.size()-1?'
    ':' ');
        }
        return 0;
    }
  • 相关阅读:
    打造系统分析师核心技能
    需求输出---一个创业团队需求卡壳的故事
    Nodejs前端服务器压缩图片
    node使用buffer生成图片
    NodeJS 常用模块积累
    ImageMagick图片服务器
    linux安装杀软 clamAV
    等保2.0与等保1.0的变化
    负载均衡的原理、分类、实现架构,以及使用场景
    等保2.0 三级基线要求项
  • 原文地址:https://www.cnblogs.com/weimeiyuer/p/7243935.html
Copyright © 2011-2022 走看看