TFRIENDS - True Friends - SPOJ Solution C++

  Problem Link : TFRIENDS 


👉 Hint : edit please

 


✅ C++ Solution :

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

#define ll long long int
#define pb push_back

vector<int> adj[100005];
vector<int> adj2[100005];
bool visited[100005];

void dfs(int v, stack<int> &s)
{
	for(int i=0;i<adj[v].size();i++)
	{
		if(!visited[adj[v][i]])
		{
			visited[adj[v][i]]=1;
			dfs(adj[v][i],s);
		}
	}

	s.push(v);
}

void dfs2(int v)
{
	for(int i=0;i<adj2[v].size();i++)
	{
		if(!visited[adj2[v][i]])
		{
			visited[adj2[v][i]]=1;
			dfs2(adj2[v][i]);
		}
	}
}

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;

		for(int i=0;i<n;i++)
		{
			adj[i].clear();
			adj2[i].clear();
			visited[i]=0;
		}

		for(int i=0;i<n;i++)
		{
		    string s;
			cin>>s;
			for(int j=0;j<s.length();j++)
			{
			    if(i==j)
			        continue;
				if(s[j]=='Y')
				{
					adj[i].pb(j);
					adj2[j].pb(i);
				}
			}
		}

		stack<int> s;
		for(int i=0;i<n;i++)
		{
			if(!visited[i])
			{
				visited[i]=1;
				dfs(i,s);
			}
		}

		for(int i=0;i<n;i++)
			visited[i]=0;
		int ans=0,v;
		while(!s.empty())
		{

			v=s.top();
			s.pop();
			if(visited[v])
				continue;
			ans++;
			visited[v]=1;
			dfs2(v);

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