rqnoj378 约会计划

题目描述

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

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
const int maxn = 3050;
int n,m,p;
int f[maxn];
string s;
map<string,int> tran;
int findf(int x){
    return x == f[x] ? x : f[x] = findf(f[x]);
}
int main(){
    ios::sync_with_stdio(false);
    cin>>n>>m>>p;
    for(int i = 1;i <= n;i++){
        cin>>s;
        tran[s] = i;
        f[i] = i;
    }
    string tx,ty;
    int x,y,fx,fy;
    for(int i = 1;i <= m;i++){
        cin>>tx>>ty;
        x = tran[tx];
        y = tran[ty];
        fx = findf(x);
        fy = findf(y);
        if(fx == fy) continue;
        f[fx] = fy;
    }
    for(int i = 1;i <= p;i++){
        cin>>tx>>ty;
        x = tran[tx];
        y = tran[ty];
        fx = findf(x);
        fy = findf(y);
        if(fx == fy) cout<<"safe"<<endl;
        else cout<<"cc cry"<<endl;
    }
    return 0;
}

#include<iostream>
using namespace std;
string mm[2009];
int n,m,p;
int father[2009];
int get(string a)
{
    for(int i=1;i<=n;i++)
    {
            if(mm[i]==a)return i;
            }
}
int find(int x)
{
    if(x!=father[x])father[x]=find(father[x]);
    return father[x];
}
int un(int x,int y)
{
    father[x]=y;
}
int main()
{
    string a,b;
    cin>>n>>m>>p;
    for(int i=1;i<=n;i++)
    {
       cin>>mm[i];
       father[i]=i;
    }
    for(int i=1;i<=m;i++)
    {
            cin>>a>>b;
            un(find(get(a)),find(get(b)));
            }
    for(int i=1;i<=p;i++)
    {
            cin>>a>>b;
            if(find(get(a))==find(get(b)))cout<<"safe"<<endl;
            else cout<<"cc cry"<<endl;
            }
    //system("pause");
    return 0;
}

 

posted @ 2016-09-17 10:32  ACforever  阅读(170)  评论(0编辑  收藏  举报