Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <unordered_map>
- #include <cmath>
- #include <cstring>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <queue>
- #include <string>
- #include <sstream>
- #include <iomanip>
- using namespace std;
- //#define int long long
- const int M = 1e9 + 7;
- const int INF = 1e18 + 5;
- const int N = 50005;
- vector<int> g[N];
- vector<int> gr[N];
- //cycle
- int curCycle = 0;
- vector<int> cycleNodes[N];
- int nodeToCycle[N];
- int color[N];
- // dp
- int dp[N];
- void dfsCycle(int node){
- color[node] = 1;
- for(int x : g[node]){
- if(color[x] == 0){
- dfsCycle(x);
- } else if(color[x] == 1){
- // cycle found x ... node - x
- curCycle++;
- int curNode = x;
- do {
- cycleNodes[curCycle].push_back(curNode);
- nodeToCycle[curNode] = curCycle;
- curNode = g[curNode][0];
- } while(curNode != x);
- }
- }
- color[node] = 2;
- }
- void dfs(int node, int par){
- dp[node] = dp[par] + 1;
- for(int x : gr[node]){
- dfs(x, node);
- }
- }
- void solve(){
- int n; cin >> n;
- for(int i = 1; i <= n; i++){
- g[i].clear();
- gr[i].clear();
- curCycle = 0;
- cycleNodes[i].clear();
- nodeToCycle[i] = 0;
- color[i] = 0;
- dp[i] = 0;
- }
- for(int i = 1; i <= n; i++){
- int u, v; cin >> u >> v;
- g[u].push_back(v);
- gr[v].push_back(u);
- }
- for(int i = 1; i <= n; i++){
- if(color[i] == 0){
- dfsCycle(i);
- }
- }
- for(int i = 1; i <= curCycle; i++){
- for(int x : cycleNodes[i]){
- dp[x] = cycleNodes[i].size();
- for(int y : gr[x]){
- if(nodeToCycle[y] == 0){
- dfs(y, x);
- }
- }
- }
- }
- int ans = 0;
- int ansNode = n + 1;
- for(int i = 1; i <= n; i++){
- if(dp[i] > ans){
- ans = dp[i];
- ansNode = i;
- } else if(dp[i] == ans){
- ansNode = min(ansNode, i);
- }
- }
- cout << ansNode << "\n";
- }
- signed main() {
- // ios_base::sync_with_stdio(false);
- // cin.tie(NULL);
- int t = 1;
- cin >> t;
- for(int i = 1; i <= t; i++){
- cout << "Case " << i << ": ";
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment