zoukankan      html  css  js  c++  java
  • Codeforces 1263D Secret Passwords(并查集)

    思路:

    这题思考一下就可以知道是对二十六个字母使用并查集进行合并;
    但是要注意区分没有出现过的字母;

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int MAX_N=26;
    int par[MAX_N],rank_u[MAX_N];
    void init_union(int n){
    	for(int i=0;i<n;i++) par[i]=i,rank_u[i]=0;
    }
    int find(int x){
    	if(par[x]==x) return x;
    	else return par[x]=find(par[x]);
    }
    void unite(int x,int y){
    	x=find(x); y=find(y);
    	if(x==y) return;
    	if(rank_u[x]<rank_u[y]) par[x]=y;
    	else{
    		par[y]=x;
    		if(rank_u[x]==rank_u[y]) rank_u[x]++;
    	}
    }
    bool flag[MAX_N];
    int main(){
    	ios::sync_with_stdio(false);
    	cin.tie(NULL);
    	init_union(MAX_N);
    	int n; cin>>n;
    	while(n--){
    		string s; cin>>s; flag[s[0]-'a']=true;
    		for(int i=1;i<s.length();i++){
    			unite(s[i]-'a',s[i-1]-'a');
    			flag[s[i]-'a']=true;
    		}
    	}
    	int ans=0;
    	for(int i=0;i<MAX_N;i++) if(flag[i]&&par[i]==i) ans++;
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    Tree UVA
    stringstream的使用
    Trees on the level UVA
    strchr和strstr函数
    sscanf的用法
    Dropping Balls UVA
    Boxes in a Line UVA
    Broken Keyboard (a.k.a. Beiju Text) UVA
    Matrix Chain Multiplication (堆栈)
    出栈次序
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308795.html
Copyright © 2011-2022 走看看