zoukankan      html  css  js  c++  java
  • CodeForces-1263D Secret Passwords 并查集 求连通分量

    CodeForces-1263D Secret Passwords 并查集 求连通分量

    题意

    给定(n)个字符串,若两个不同的字符串中含相同的字符,就认为这两个字符串在一个集合中,问最终有几个集合

    分析

    看题意就很像是并查集问题,关键在于怎么维护并查集(建图)

    容易想到至多有26个集合,不算大

    不妨以字符串的第1个字符为根,字符串中其他字符向第1个字符连边

    最后(for) 一遍统计连通分量即可,统计连通分量也很简单,判断祖先是自己的个数即可

    代码

    char s[maxn];
    int vis[35];
    int pre[35];
    int cnt;
    
    
    int Find(int x) {
        return pre[x] != x ? pre[x] = Find(pre[x]) : x;
    }
    
    void Union(int x, int y) {
        int p = Find(x), q = Find(y);
        if (p != q) pre[q] = p;
    }
    
    int main() {
        int n = readint();
        for (int i = 0; i <= 30; i++) pre[i] = i;
        for (int i = 0; i < n; i++) {
            scanf("%s", s);
            int len = strlen(s);
            vis[s[0] - 'a'] = 1;
            for (int j = 1; j < len; j++) vis[s[j] - 'a'] = 1, Union(s[j] - 'a', s[0] - 'a');
        }
        for (int i = 0; i < 30; i++) {
            if (vis[i] && pre[i] == i) cnt++;
        }
        printf("%d", cnt);
    }
    
  • 相关阅读:
    Gevent高并发网络库精解
    python多线程参考文章
    python多线程
    进程与线程
    golang 微服务以及相关web框架
    微服务实战:从架构到发布
    python 常用库收集
    总结数据科学家常用的Python库
    20个最有用的Python数据科学库
    自然语言处理的发展历程
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13583673.html
Copyright © 2011-2022 走看看