➤ 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!!