Submission #317384

#TimeUsernameProblemLanguageResultExecution timeMemory
317384mohamedsobhi777Parachute rings (IOI12_rings)C++14
20 / 100
4046 ms1348 KiB
#include <bits/stdc++.h> using namespace std; int N; const int cn = 10000; vector<int> adj[cn]; int deg[cn]; int vis[cn]; int c; bool bd = 1; int del; vector<int> vec; void dfs(int x, int p) { vis[x] = c; int ch = (p != x); vec.push_back(x); for (auto u : adj[x]) { if (u == p || del == u) continue; if (vis[u] == c) bd = 0; else dfs(u, x), ++ch; } if (ch > 2) bd = 0; } set<int> bigs; int brute() { set<int> cri; for (int i = 0; i < N; ++i) { ++c; del = i; for (auto u : adj[i]) { deg[u]--; deg[i]--; } bool ok = 1; vec.clear(); for (int j = 0; j < N; ++j) { if (vis[j] != c && i != j) { bd = 1; dfs(j, j); ok &= bd; } } if (ok) cri.insert(i); for (auto u : adj[i]) { deg[u]++; deg[i]++; } } return (int)cri.size(); } void Init(int N_) { N = N_; } void Link(int A, int B) { adj[A].push_back(B); adj[B].push_back(A); deg[A]++; deg[B]++; if (deg[A] > 3) bigs.insert(A); if (deg[B] > 3) bigs.insert(B); } int CountCritical() { if (bigs.size() > 1) return 0; return brute(); return N; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...