zoukankan      html  css  js  c++  java
  • RQNOJ PID379 / 约会计划 -并查集

    PID379 / 约会计划

    题目描述

    cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错。然而,最关键的是,cc能够很好的调解各各妹妹间的关系。mm之间的关系及其复杂,cc必须严格掌握她们之间的朋友关系,好一起约她们出去,cc要是和不是朋友的两个mm出去玩,后果不堪设想……

    cc只掌握着一些mm之间的关系,但是cc比较聪明,他知道a和b是朋友,b和c 是朋友,那么a和c也是朋友。

    下面给出m对朋友关系, cc 定了p次约会,每次约会找两个mm,如果这两个mm是朋友,那么不会出乱子,输出‘safe’,要是不是朋友,那么cc必然会挨……,输出‘cc cry’(T_T)。

    【数据范围】

    0<m<=2008

    0<p<=2008

    输入格式

    第一行为n,m,p。n为mm的数量,cc知道m对朋友关系,有p次约会。

    2到n+1 行,每行一个字符串,为第i个mm的名字。{字符串长度<=11,且全大写}

    以下m行,每行两个字符串,用空格隔开 ,为有朋友关系的两个mm的名字。

    以下p行,每行为两个字符串,用空格隔开,为这p次约会中两个mm的名字。

    {保证数据不会出现没有出现过的名字}

    输出格式

    输出P行表示第i次约会的情况,输出‘safe’或者‘cc cry’

    样例输入

    3 1 1
    AAA
    BBB
    CCC
    AAA CCC
    AAA BBB

    样例输出

    cc cry

    水一下并查集。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<cstdlib>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<map>
     9 #include<stack>
    10 using namespace std;
    11 const int maxn=1e4+10;
    12 int pre[maxn];
    13 map<string,int>pos;
    14 int find(int x){
    15     int r=x;
    16     while(pre[r]!=r)r=pre[r];
    17     int i=x,j;
    18     while(i!=r){
    19         j=pre[i];
    20         pre[i]=r;
    21         i=j;
    22     }
    23     return r;
    24 }
    25 
    26 void join(int x,int y){
    27     int a=find(x);
    28     int b=find(y);
    29     if(a!=b)
    30         pre[a]=b;
    31 }
    32 
    33 int main(){
    34     int n,m,p;
    35     cin>>n>>m>>p;
    36     for(int i=1;i<=n;i++)
    37         pre[i]=i;
    38     for(int i=1;i<=n;i++){
    39         string a;
    40         cin>>a;
    41         pos[a]=i;
    42     }
    43     for(int i=1;i<=m;i++){
    44         string a,b;
    45         cin>>a>>b;
    46         join(pos[a],pos[b]);
    47     }
    48     for(int i=1;i<=p;i++){
    49         string a,b;
    50         cin>>a>>b;
    51         if(find(pos[a])!=find(pos[b]))
    52             cout<<"cc cry"<<endl;
    53         else
    54             cout<<"safe"<<endl;
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    iphone 使用委托(delegate)在不同的窗口之间传递数据
    创建单键模式的类
    读入Plist文件中的信息
    C#读取Excel,取值为空的解决办法!
    ORACLE 常见的数据类型
    ArcGISServer 将内网地图服务映射修改外网可以访问的地图服务
    C#中获取当前路径的几种方法
    sql server2005登录出错问题(转载)
    (转载)服务器控件的生命周期
    ORACLE 中ROWNUM用法总结(转载)
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9492402.html
Copyright © 2011-2022 走看看