• 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);
    }
    
  • 相关阅读:
    govalidators 验证
    go iris框架 获取url的两种方法
    tornado框架
    并发/并行,阻塞/非阻塞,同步/异步
    CSS选择器及优先级
    linux下压力测试命令ab
    asyncio
    linux网络原理及基础设置
    linux命令
    linux简介
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13583673.html
Copyright © 2020-2023  润新知