131D. Subway - Codeforces Solution C++

  Problem Link : 131D. Subway 


✅ C++ Solution :

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

#define ll long long int

int n;
vector<int> adj[3001];
int dis[3001];
bool visited[3001];
bool visited2[3001];
int par[3001];

bool dfs(int v, int p, queue<int> & q)
{
	par[v]=p;
	for(int i=0;i<adj[v].size();i++)
	{
		if(adj[v][i]==p)
			continue;
		if(!visited[adj[v][i]])
		{
			visited[adj[v][i]]=1;
			if(dfs(adj[v][i],v,q))
			    return true;
		}
		else
		{
		//    cout<<v<<" "<<adj[v][i]<<endl;
			dis[adj[v][i]]=0;
			visited2[adj[v][i]]=1;
			q.push(adj[v][i]);
			int l=v;
			while(l!=adj[v][i])
			{
				visited2[l]=1;
				dis[l]=0;
				q.push(l);
				l=par[l];
			//	cout<<l<<endl;
			}
			return true;
		}
	}
	return false;

}

int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		visited[i]=0;
		adj[i].clear();
		visited2[i]=0;
	}
	int x,y;
	for(int i=1;i<=n;i++)
	{
		cin>>x>>y;
		adj[x].push_back(y);
		adj[y].push_back(x);
	}

	queue<int> q;
	visited[1]=1;
	par[1]=-1;
	dfs(1,-1,q);
	int v;
	while(!q.empty())
	{
		v=q.front();
		q.pop();
		for(int i=0;i<adj[v].size();i++)
		{
			if(!visited2[adj[v][i]])
			{
				visited2[adj[v][i]]=1;
				q.push(adj[v][i]);
				dis[adj[v][i]]=dis[v]+1;
			}
		}
	}

	for(int i=1;i<=n;i++)
		cout<<dis[i]<<" ";
}

 

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