CSES - Shared codeLink to this code:
https://cses.fi/paste/1e823765e5ba901b686a2b/
#include<iostream>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
class FlightRoutesCheck{
vector<int>*graph,*flipGraph;
vector<bool>vis;
vector<int>ans;
stack<int>st;
public:
FlightRoutesCheck(vector<int> *g,vector<int>*f,int n){
graph=g;
flipGraph=f;
vis.resize(n+1,false);
}
void traverse(int u){
if(vis[u])return;
vis[u]=true;
for(int v:graph[u]){
traverse(v);
}
st.push(u);
}
void revTraverse(int u){
if(vis[u])return;
vis[u]=true;
for(int v:flipGraph[u]){
revTraverse(v);
}
}
vector<int> getSol(int n){
for(int i=1;i<=n;i++){
if(!vis[i]){
traverse(i);
}
}
fill(vis.begin(),vis.end(),false);
int num;
while(!st.empty()){
num=st.top();
st.pop();
if(!vis[num]){
revTraverse(num);
ans.push_back(num);
}
if(ans.size()==2)break;
}
return ans;
}
};
int main(){
int n,m,a,b;
cin>>n>>m;
vector<int> graph[n+1],flipGraph[n+1];
for(int i=0;i<m;i++){
cin>>a>>b;
graph[a].push_back(b);
flipGraph[b].push_back(a);
}
FlightRoutesCheck check(graph,flipGraph,n);
vector<int> ans=check.getSol(n);
if(ans.size()==2){
cout<<"NO\n"<<ans[1]<<" "<<ans[0];
}else{
cout<<"YES\n";
}
return 0;
}