QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#777529#2341. Dead-End DetectorwxhtzdyWA 0ms3648kbC++201.9kb2024-11-24 02:56:142024-11-24 02:56:15

Judging History

This is the latest submission verdict.

  • [2024-11-24 02:56:15]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3648kb
  • [2024-11-24 02:56:14]
  • Submitted

answer

#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n >> m;
  vector<vector<int>> g(n);
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    --u; --v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  vector<pair<int, int>> res;
  vector<bool> skip(n);
  {
    vector<bool> was(n);
    bool ok;
    vector<int> ver;
    function<void(int, int)> Dfs = [&](int v, int pv) {
      ver.push_back(v);
      was[v] = true;
      for (int u : g[v]) {
        if (u == pv) {
          continue;
        }
        if (!was[u]) {
          Dfs(u, v);
        } else {
          ok = false;
        }
      }
    };
    for (int i = 0; i < n; i++) {
      if (was[i]) {
        continue;
      }
      ok = true;
      ver.clear();
      Dfs(i, i);
      if (ok) {
        for (int i : ver) {
          skip[i] = true;
          if (int(g[i].size()) == 1) {
            res.emplace_back(i, g[i][0]);
          }
        }
      }
    }
  }
  {
    vector<int> deg(n);
    for (int i = 0; i < n; i++) {
      deg[i] = int(g[i].size());
    }
    vector<int> que;
    for (int i = 0; i < n; i++) {
      if (skip[i]) {
        continue;
      }
      if (deg[i] == 1) {
        que.push_back(i);
      }
    }
    for (int b = 0; b < int(que.size()); b++) {
      int i = que[b];
      for (int j : g[i]) {
        deg[j] -= 1;
        if (deg[j] == 1) {
          que.push_back(j);
        }
      }
    }
    vector<int> in(n);
    for (int i : que) {
      in[i] = true;
    }
    for (int i = 0; i < n; i++) {
      if (skip[i] || !in[i]) {
        continue;
      }
      for (int j : g[i]) {
        if (!in[j]) {
          res.emplace_back(j, i);
        }
      }
    }
  }
  cout << int(res.size()) << '\n';
  for (auto& p : res) {
    cout << p.first + 1 << " " << p.second + 1 << '\n';
  }
  return 0;  
}

Details

Test #1:

score: 100
Accepted
time: 0ms
memory: 3584kb

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3648kb