zoukankan      html  css  js  c++  java
  • 问题 D: 家庭问题

    问题 D: 家庭问题


    时间限制: 1 Sec  内存限制: 128 MB
    [命题人:admin]

    题目描述

    有n个人,编号为1,2,……n,另外还知道存在K个关系。一个关系的表达为二元组(α,β)形式,表示α,β为同一家庭的成员。
    当n,k和k个关系给出之后,求出其中共有多少个家庭、最大的家庭中有多少人?
    例如:n=6,k=3,三个关系为(1,2),(1,3),(4,5)
    此时,6个人组成三个家庭,即:{1,2,3}为一个家庭,{4,5}为一个家庭,{6}单独为一个家庭,第一个家庭的人数为最多。

    输入

    文件的第一行为n,k二个整数(1≤n≤100)(用空格分隔)
    接下来的k行,每行二个整数(用空格分隔)表示关系

    输出

    二个整数(分别表示家庭个数和最大家庭人数)

    样例输入 Copy

    6 3
    1 2
    1 3
    4 5

    样例输出 Copy

    3 3
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<map> 
    #include<bits/stdc++.h> 
    using namespace std;
    typedef long long ll; 
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int maxn=1e5;
    int pre[maxn]; 
    int find(int x){
        return pre[x]==x?x:find(pre[x]);
    }
    void merge(int v,int u){
        int t1,t2;
        t1=find(v);
        t2=find(u);
        if(t1!=t2){
            pre[t1]=t2;
        } 
    }
    int n,m;
    int vis[maxn];
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            pre[i]=i;
        }
        int x,y;
        for(int i=1;i<=m;i++){
            cin>>x>>y;
            merge(x,y);
        }
        int ans=0;
        int max1=0;
        for(int i=1;i<=n;i++){
            int p=find(i);
            if(vis[p]==0){
                vis[p]++;
                max1=max(max1,vis[p]);
                ans++;//家庭个数 
            }
            else{
                vis[p]++;
                max1=max(max1,vis[p]);
            } 
        }
        printf("%d %d",ans,max1);
        return 0;
    }
  • 相关阅读:
    [ios]blocks
    [算法] 堆,栈 【转】
    [ios]关于内存错误调试
    [ios]get,post请求 【转】
    [ios]iOS模拟器应用程序目录结构
    [ios]iPhone地图应用开发以及自定义Annotation [转]
    [算法]插入排序
    [ios]让alertView 自动消失【转】
    [ios]延迟执行方法,取消执行方法
    [算法] 基数排序
  • 原文地址:https://www.cnblogs.com/lipu123/p/12334608.html
Copyright © 2011-2022 走看看