➤ Problem Link : RPLA
👉 Hint : 1D DP
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; vector<int> adj[1001]; bool visited[1001]; int dpRank[1001]; vector<pair<int,int> >mp; bool comp(pair<int,int> a,pair<int,int> b) { if(a.first!=b.first) return a.first<b.first; return a.second<b.second; } void CalcRank(int v) { visited[v]=1; for(auto it=adj[v].begin();it!=adj[v].end();it++) { if(dpRank[*it]==-1) CalcRank(*it); dpRank[v]=max(dpRank[v],1+dpRank[*it]); } if(dpRank[v]==-1) dpRank[v]=1; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t; cin>>t; for(int k=1;k<=t;k++) { int n,r,a,b; cin>>n>>r; mp.clear(); memset(dpRank,-1,sizeof(dpRank)); memset(visited,0,sizeof(visited)); for(int i=0;i<=n;i++) adj[i].clear(); while(r--) { cin>>a>>b; adj[a].push_back(b); } for(int i=0;i<n;i++) if(!visited[i]) CalcRank(i); for(int i=0;i<n;i++) mp.push_back(make_pair(dpRank[i],i)); sort(mp.begin(),mp.end(),comp); cout<<"Scenario #"<<k<<":"<<endl; for(auto it =mp.begin();it!=mp.end();it++) cout<<it->first<<" "<<it->second<<endl; } }
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!!