zoukankan      html  css  js  c++  java
  • 洛谷 P2078 朋友(并查集)

    【题目信息】

    洛谷 P2078 朋友(并查集)

    【审题】

    1.只能异性恋

    2.两个公司只有小红小明认识

    3.朋友的朋友是朋友

    【分析】

    这是一道很简单的并查集模板题。由“【审题】3”可知,直接把有关系的都放在一个集合里,然后找到同时有小明和小红的集合,输出该集合中男女人数中较小的一个。

    【心路历程】

    没看题解的时候,一直在纠结如何找到男女重合人数最多的集合,直到看到第一个题解,才发现,能同时有男有女的集合只能有一个,就是小明小红所在集合。
    所以压根不用去遍历每个集合,直接输出即可。

    【代码】

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,p,q;
    map<int,int>fa;
    int find(int x)
    {
        if(fa[x]==x) return x;
        return fa[x]=find(fa[x]);
    }
    void merge(int x,int y)
    {
        x=find(x),y=find(y);
        if(x!=y)
        {
            fa[x]=find(fa[y]);
        }
    }
    
    int main()
    {
        int x,y;
        scanf("%d %d %d %d",&n,&m,&p,&q);
        for(int i=-1*m;i<=n;i++) fa[i]=i;
        for(int i=1;i<=p+q;i++)
        {
            scanf("%d %d",&x,&y);
            merge(x,y);
        }
        int to1=0,to2=0; 
        for(int i=-1*m;i<=-1;i++)
        {
            if(find(fa[i])==find(-1)) to1++;
        }
        for(int j=-1*m;j<=n;j++)
        {
            if(find(fa[j])==find(1)) to2++ ;
        }
        printf("%d",min(to1,to2));
        return 0; 
    }

    每日一句:

    You cannot blame the gravity for falling in love.

  • 相关阅读:
    linux 常用命令
    ubuntu 安装在硬盘与配置
    linux管道符、重定向与环境变量
    linux用户身份与文件权限
    centos开启ftp服务
    js实现常见排序算法
    算法分析
    Vim
    CSS的3种使用方法
    cookie 在登录时的存储,获取,清除
  • 原文地址:https://www.cnblogs.com/TheZealous/p/15190176.html
Copyright © 2011-2022 走看看