D. Secret Passwords_并查集

D. Secret Passwords

题目大意

给一堆字符串,两个串有一个字母一样就算等效。问所有字符串里有几个不等效的。

思路

并查集入门题

ll fa[N] ;

ll find(ll x){
	return fa[x] = fa[x] == x ? x : find(fa[x]) ;
}

void solve(){
	ll n ; cin >> n ;
	ll ans = n ;
	
	vct<vct<ll> > letter(40) ; 
	
	rep(i , 1 , n) fa[i] = i ;
	
	rep(i , 1 , n){
		string s ;
		cin >> s ;
		for (char c : s) letter[c - 'a'].pb(i) ;
	}
	
	rep(i , 0 , 30){
		if(letter[i].size() < 2) continue ;
	
		ll ft = find(letter[i][0]) ;
		rep(j , 1 , letter[i].size() - 1){
			ll fi = find(letter[i][j]) ;
			if(ft != fi){
				ans -- ;
				fa[fi] = ft ;
			}
		}
	}
	
	cout << ans << "\n" ;
}//code_by_tyrii 
posted @   tyrii  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2021-11-04 洛谷-P1196 银河英雄传说
点击右上角即可分享
微信分享提示