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.

  • 相关阅读:
    R语言常用操作
    Java小知识点
    客户端(android,ios)与服务器通信
    图片保存数据库
    Centos 添加SWAP(交换分区)
    mysql基本知识
    php 工作模式
    apache 工作模式
    lnmp 虚拟主机配置及重写
    mysql alter的常用用法
  • 原文地址:https://www.cnblogs.com/TheZealous/p/15190176.html
Copyright © 2011-2022 走看看