Từ Trường THPT chuyên Hoàng Lê Kha, Tây Ninh, Trường Đại Học Công Nghệ Thông Tin - Đại học Quốc gia TP.HCM, Trường Đại học Khoa học Tự nhiên - Đại học Quốc gia TP.HCM
Thông tin
include <bits/stdc++.h>
define int long long
using namespace std; const int N = 1e5 + 2; int n, m, scc[N], num[N], lownum[N], nscc, cnt, tplt[N]; stack<int> s; vector<int> adj[N];
void Tajan(int u) { num[u] = lownum[u] = ++cnt; s.push(u); for(auto v : adj[u]){ if(scc[v]) continue; if(!num[v]){ Tajan(v); lownum[u] = min(lownum[u], lownum[v]); } else lownum[u] = min(lownum[u], num[v]); } if(num[u] == lownum[u]){ nscc++; scc[u] = nscc; tplt[nscc] = u; while(s.top() != u){ scc[s.top()] = nscc; tplt[nscc] = min(tplt[nscc], s.top()); s.pop(); } s.pop(); } }
signed main() { cin.tie(nullptr)->syncwithstdio(false);
cin >> n >> m;
for(int i=1; i<=m; i++){
int u, v;
cin >> u >> v;
adj[u].push_back(v);
}
for(int i=1; i<=n; i++){
if(num[i] == 0){
cnt = 0;
Tajan(i);
}
}
if(nscc == 1) cout << "YES";
else{
cout << "NO" << '\n';
sort(tplt+1, tplt+nscc+1);
for(int i=1; i<=2; i++){
cout << tplt[i] << ' ';
}
}
return 0;
} /* 4 5 1 2 2 3 3 1 1 4 3 4 */