zoukankan      html  css  js  c++  java
  • codeforces#766 D. Mahmoud and a Dictionary (并查集)

    题意:给出n个单词,m条关系,q个询问,每个对应关系有,a和b是同义词,a和b是反义词,如果对应关系无法成立就输出no,并且忽视这个关系,如果可以成立则加入这个约束,并且输出yes。每次询问两个单词的关系,1,同义词,2,反义词,3,不确定

    题解:这题思路比较奇特,开辟2*n的并查集的空间,第i+n代表i的反义词所在的树,初始为i+n,也就是说i+n代表i的反义词

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int maxn=1e5+10;
    char a[30],b[30];
    map<string,int>ma;
    int book[maxn*2];
    int fin(int x)
    {
        if(book[x]==x)return x;
        else return book[x]=fin(book[x]);
    }
    int main()
    {
        int n,m,q;
        scanf("%d %d %d",&n,&m,&q);
        for(int i=1;i<=n;i++)
        {
            scanf("%s",a);
            ma[a]=i;
        }
        for(int i=1;i<=2*n;i++)
            book[i]=i;
        for(int i=1;i<=m;i++)
        {
            int com;
            scanf("%d %s %s",&com,a,b);
            int x=ma[a],y=ma[b];
            if(com==1)
            {
                if(fin(x)==fin(y+n)||fin(y)==fin(x+n))
                    printf("NO
    ");
                else
                {
                    printf("YES
    ");
                    book[fin(x)]=fin(y);
                    book[fin(x+n)]=fin(y+n);
                }
            }
            else
            {
                if(fin(x)==fin(y)||fin(x+n)==fin(y+n))
                    printf("NO
    ");
                else
                {
                    printf("YES
    ");
                    book[fin(x)]=fin(y+n);
                    book[fin(y)]=fin(x+n);
                }
            }
        }
        for(int i=1;i<=q;i++)
        {
            scanf("%s %s",a,b);
            int x=ma[a],y=ma[b];
            if(fin(x)==fin(y)||fin(x+n)==fin(y+n))
                printf("1
    ");
            else if(fin(x)==fin(y+n)||fin(y)==fin(x+n))
                printf("2
    ");
            else
                printf("3
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    IIS: 必须输入密码手动设置密码同步后
    IIS操作控制类
    SQL对IP地址进行拆分
    HTTP_REFERER的工作方式[转贴]
    如何知道同服务器上都有哪些网站?
    简单判断临时表是否存在
    .NET 3.5 SP 1发布了
    Log Parser很好很强大的IIS日志分析工具
    遍历Request.ServerVariables
    06复杂查询(多数据库表)
  • 原文地址:https://www.cnblogs.com/carcar/p/10126848.html
Copyright © 2011-2022 走看看