Cod sursa(job #2897893)

Utilizator Cosmin2004_InfoMoldoveanu Cosmin Cosmin2004_Info Data 5 mai 2022 11:03:38
Problema Strazi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
const int N = 1 << 8;
vector <int> g[N + 5];
int h[N + 5];
void dfs(int u) {
  if(h[u]) return;
  for(int v : g[u]) {
    if(!h[v]) dfs(v);
    h[u] = max(h[u], h[v] + 1);
  }
}
bool vis[N + 5];
vector <int> path;
vector <pair <int, int>> sol;
int getroot(int u) {
  vis[u] = true;
  path.push_back(u);
  if(!g[u].size()) return u;
  for(int v : g[u]) if(!vis[v])
    return getroot(v);
}

int main()
{
    ifstream cin("strazi.in");
    ofstream cout("strazi.out");
    int n, m;
    priority_queue <pair <int, int>> pq;
    cin >> n >> m;
    for(int i = 1, u, v; i <= n; i++)
      cin >> u >> v,
      g[u].push_back(v);
    for(int i = 1; i <= n; i++) {
      dfs(i);
      pq.emplace(h[i], i);
    }
    int v = 0;
    while(!pq.empty()) {
      auto [dist, u] = pq.top();
      pq.pop();
      if(vis[u]) continue;
      if(v) sol.emplace_back(v, u);
      v = getroot(u);
    }
    cout << sol.size() << "\n";
    for(auto x : sol)
      cout << x.first << " " << x.second << "\n";
    for(int x : path)
      cout << x << " ";
    return 0;
}