• TZOJ:3660: 家庭关系


    描述

    给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系。

    输入

    输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100),表示有100个关系描述,接下来有n行,每行的描述方式为:
    p1 p2 c
    其中p1、p2和c均为一串文本,表示每个人的姓名,p1和p2为c的父亲和母亲。
    最后一行包含2个字符串a和b,为待判断的两个人的姓名。
    每个人的姓名由大小写字母组成,长度不超过80。

    若n为0,表示输入结束。

    输出

    如果a和b在同一个家庭中,则输出Yes
    否则输出No

    样例输入

    样例输出

    题目来源

    TZOJ

    解题思路:映射一下 然后并查集就好了

    菜鸡的成长史 ^_^

     

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int arr[505];
     4 int find_root(int x) {return arr[x]==x?x:arr[x]=find_root(arr[x]);}
     5 void unionset(int x,int y)
     6 {
     7     int xx=find_root(x),yy=find_root(y);
     8     if(xx!=yy) arr[xx]=yy;
     9 }
    10 int main()
    11 {
    12     ios::sync_with_stdio(false);
    13     int n,m;
    14     string s,s1,s2,name,name1;
    15     while(cin>>n&&n!=0)
    16     {
    17         int num=0;
    18         map<string,int> ma;
    19         ma.clear();
    20         for(int i=1;i<=505;i++)
    21             arr[i]=i;
    22         for(int i=1;i<=n;i++){
    23             cin>>s>>s1>>s2;  //给字符编一个号
    24             if(!ma[s]) ma[s]=++num;
    25             if(!ma[s1]) ma[s1]=++num;
    26             if(!ma[s2]) ma[s2]=++num;
    27             unionset(ma[s],ma[s1]),unionset(ma[s],ma[s2]);
    28         }
    29         cin>>name>>name1;
    30         if(ma[name]==0||ma[name1]==0) {cout << "No" << endl;continue;}
    31         if(find_root(ma[name])==find_root(ma[name1]))
    32             cout << "Yes";
    33         else cout << "No"; cout << endl;
    34     }
    35     return 0;
    36 }
    View Code

     

     

  • 相关阅读:
    LVS+KEEPALIVED(2/3)
    LVS+KEEPALIVED(1/3)
    DRF之权限源码详解
    DRF认证之源码详解
    Django REST framework之JWT
    Restful_Framework之插件
    求两个有序数组的中位数,要求时间复杂度log(m+n)
    Django_Restful_Framework视图与路由
    Django_Restful_Framework
    restFul接口设计规范
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/10617984.html
Copyright © 2020-2023  润新知