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