645D. Robot Rapping Results Report - Codeforces Solution C++

  Problem Link : 645D. Robot Rapping Results Report 


✅ C++ Solution :

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

#define ll long long int

#define pp pair<int,int>
#define mp make_pair

vector<int> adj[200001];
int n,m;
int root;
pp edges[100001];
int dp[200001];

int depth(int v)
{
	int dpt=1;
	for(int i=0;i<adj[v].size();i++)
	{
		if(dp[adj[v][i]])
			dpt=max(dpt,dp[adj[v][i]]+1);
		else
			dpt=max(dpt,depth(adj[v][i])+1);
	}
	return dp[v]=dpt;

}

bool func(int m)
{
	for(int i=1;i<=n;i++)
	{
		adj[i].clear();
		dp[i]=0;
	}
	for(int i=0;i<m;i++)
		adj[edges[i].first].push_back(edges[i].second);
	if(depth(root) == n)
		return 1;

	return 0;

}

int main()
{
	int x,y;
	cin>>n>>m;
	int in[n+1];
	memset(in,0,sizeof(in));
	for(int i=0;i<m;i++)
	{
		cin>>x>>y;
		edges[i].first=x;
		edges[i].second=y;
		in[y]++;
	}
	root=-1;
	for(int i=1;i<=n;i++)
		if(in[i]==0)
		{
			root=i;
			break;
		}
	int low=0,mid,high=m;

	while(low<high)
	{
		mid=low+(high-low)/2;
		if(func(mid))
			high=mid;
		else
			low=mid+1;
	}
    if(func(low))
        cout<<low;
    else
        cout<<"-1";

}

 

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