Submission #38051

#TimeUsernameProblemLanguageResultExecution timeMemory
38051funcsrParachute rings (IOI12_rings)C++14
20 / 100
4027 ms1228 KiB
#include <iostream> #include <vector> #include <string> #define rep(i, n) for (int i=0; i<(n); i++) #define pb push_back using namespace std; int N; vector<int> G[5000]; int cnt[5000]; void Init(int N_) { N = N_; cnt[0] = N; if (N > 5000) abort(); } void Link(int A, int B) { cnt[G[A].size()]--; cnt[G[B].size()]--; G[A].pb(B); G[B].pb(A); cnt[G[A].size()]++; cnt[G[B].size()]++; } bool has_cycle; bool used[5000]; void dfs(int x, int p, int except) { used[x] = true; for (int t : G[x]) if (t != p && t != except) { if (used[t]) { has_cycle = true; break; } dfs(t, x, except); } } int CountCritical() { int ctr = 0; rep(i, N) { rep(j, N) used[j] = false; has_cycle = false; rep(j, N) if (i != j && !used[j]) dfs(j, -1, i); if (has_cycle) continue; for (int t : G[i]) { cnt[G[t].size()]--; cnt[G[t].size()-1]++; } cnt[G[i].size()]--; if (cnt[0]+cnt[1]+cnt[2] == N-1) ctr++; cnt[G[i].size()]++; for (int t : G[i]) { cnt[G[t].size()-1]--; cnt[G[t].size()]++; } } return ctr; }
#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...