574B. Bear and Three Musketeers - Codeforces Solution C++

  Problem Link : 574B. Bear and Three Musketeers 


✅ C++ Solution :

 
#include<bits/stdc++.h>

using namespace std;

int ans;

void dfs(int i,int p,vector<int> adj[],int cnt[],bool visited[])
{


	for(int j=0;j<adj[i].size();j++)
	{
		if(p!=-1 && p!=adj[i][j] && find(adj[p].begin(),adj[p].end(),adj[i][j])!=adj[p].end())
		{
		    if(ans!=-1)
			    ans=min(ans,cnt[p]+cnt[i]+cnt[adj[i][j]]-6);
			else
			    ans=cnt[p]+cnt[i]+cnt[adj[i][j]]-6;
		}	
		if(!visited[adj[i][j]])
		{
		    visited[adj[i][j]]=1;
			dfs(adj[i][j],i,adj,cnt,visited);
			
		}
		else
		{
			for(int k=0;k<adj[adj[i][j]].size();k++)
			{
				if(adj[adj[i][j]][k]!=i && find(adj[i].begin(),adj[i].end(),adj[adj[i][j]][k])!=adj[i].end())
				{
				    if(ans!=-1)
					    ans=min(ans,cnt[i]+cnt[adj[i][j]]+cnt[adj[adj[i][j]][k]]-6);
					else
					    ans=cnt[i]+cnt[adj[i][j]]+cnt[adj[adj[i][j]][k]]-6;
				}
			}
		}

	}

}

int main()
{
	ans=-1;
	int n,m,i,j;
	cin>>n>>m;
	vector<int> adj[n+1];
	int cnt[n+1];
	bool visited[n+1];
	memset(cnt,0,sizeof(cnt));
	memset(visited,0,sizeof(visited));
	while(m--)
	{
		cin>>i>>j;
		adj[i].push_back(j);
		adj[j].push_back(i);
		cnt[i]++;
		cnt[j]++;
	}
	for(int i=1;i<=n;i++)
	{
	    if(!visited[i])
	    {
	        visited[i]=1;
	        dfs(i,-1,adj,cnt,visited);
	    }
	}
    
	cout<<ans<<"\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!!