277A. Learning Languages - Codeforces Solution C++

  Problem Link : 277A. Learning Languages 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;

int parent[101];
bool zero[101];


int find(int v)
{
	if(parent[v]==v)
		return v;
	return parent[v]=find(parent[v]);
}



int main()
{
	int n,m,a,b;
	cin>>n>>m;
	memset(zero,0,sizeof(zero));
	unordered_map<int,vector<int> > mp;
	for(int i=1;i<=n;i++)
		parent[i]=i;
	for(int i=1;i<=n;i++)
	{
		int c,lang;
		cin>>c;
		if(c==0)
			zero[i]=1;
		for(int j=0;j<c;j++)
		{
			cin>>lang;

			for(int k=0;k<mp[lang].size();k++)
			{
				a=find(i);
				b=find(mp[lang][k]);

				if(a!=b)
					parent[b]=a;

			}
			mp[lang].push_back(i);

		}
	}

	int cnt=0;
	int zct=0;
	for(int i=1;i<=n;i++)
	{
		if(zero[i])
			zct++;
		else if(parent[i]==i)
			cnt++;
	}
	if(cnt>0)
	    cout<<cnt-1+zct<<"\n";
	else
	    cout<<zct<<"\n";
}

 

Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook. 

😇Happy Learning!!