Submission #1067506

#TimeUsernameProblemLanguageResultExecution timeMemory
1067506juicy전압 (JOI14_voltage)C++17
100 / 100
61 ms15004 KiB
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif

const int N = 1e5 + 5;

int n, m, cnt;
int dep[N];
array<int, 2> a[N];
bool vis[N];
vector<int> g[N];

void dfs(int u, int p) {
  vis[u] = 1;
  bool flg = 0;
  for (int v : g[u]) {
    if (v == p && !flg) {
      flg = 1;
      continue;
    }
    if (!vis[v]) {
      dep[v] = dep[u] + 1;
      dfs(v, u);
    } else if (dep[u] > dep[v]) {
      int c = (dep[u] - dep[v] - 1) & 1;
      ++a[u][c];
      --a[v][c];
      cnt += c;
    }
  }
}

void DFS(int u) {
  vis[u] = 1;
  for (int v : g[u]) {
    if (!vis[v]) {
      DFS(v);
      for (auto j : {0, 1}) {
        a[u][j] += a[v][j];
      }
    }
  }
}

int main() {
  ios::sync_with_stdio(false); cin.tie(nullptr);

  cin >> n >> m;
  while (m--) {
    int u, v; cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 1; i <= n; ++i) {
    if (!vis[i]) {
      dfs(i, i);
    }
  }
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= n; ++i) {
    if (!vis[i]) {
      DFS(i);
    }
  }
  int res = 0;
  for (int i = 1; i <= n; ++i) {
    res += dep[i] && a[i][1] == cnt && !a[i][0];
  }
  res += cnt == 1;
  cout << res;
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...