zoukankan      html  css  js  c++  java
  • Codeforces Round #603 (Div. 2) D. Secret Passwords

    题意

    给定n个字符串

    如果存在一个或多个字母同时在字符串a和b中出现 这a和b就被分在同一组
    如果a和c在同一组 b和c在同一组 则a和b也在同一组

    问所有的字符串最后被分成几组

    思路

    一道并查集好题
    把每一个字母当成一个点,对于每一个给出的字符串,把字符串中的所有字母之间都连上边。这样,若两个字符串有公共的字母,他们就一定在一个连通块内,用并查集维护即可

    (code)

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+2019;
    int fa[30];
    int n;
    int find(int x)
    {
    	if(fa[x]==x) return x;
    	else return fa[x]=find(fa[x]);
    }
    int visit[30];
    int ans;
    int main()
    {
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    	cin>>n;
    	for(int i=1;i<=26;++i) fa[i]=i;
    	for(int i=1;i<=n;++i)
    	{
    		char s[N];
    		scanf("%s",s+1);
    		int len=strlen(s+1);
    		for(int j=1;j<=len;++j) visit[s[j]-'a'+1]=1;
    		for(int j=1;j<len;++j)
    		{
    			int fx=find(s[j]-'a'+1),fy=find(s[j+1]-'a'+1);
    			if(fx!=fy) fa[fx]=fy;
    		}
    	}
    	for(int i=1;i<=26;++i) 
    		if(visit[i]==1&&fa[i]==i) ans++;
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    docker 学习操作记录 4
    docker 学习操作记录 1
    centos 旧版本镜像
    zabbix 搭建 mysql 连接报错
    js判断是否为手机或是pc
    滚动翻页vue
    note
    Vue-cli 鼠标监听事件之滚动条
    adobe Keychain mac
    HTML协义代码
  • 原文地址:https://www.cnblogs.com/pyyyyyy/p/12104636.html
Copyright © 2011-2022 走看看