Submission #62436

#TimeUsernameProblemLanguageResultExecution timeMemory
62436zadrgaParachute rings (IOI12_rings)C++14
55 / 100
4027 ms108080 KiB
// 14.47 #include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define fi first #define se second #define INF (1LL << 55) #define MOD (1000 * 1000 * 1000 + 7) #define maxn 1000111 typedef long long ll; typedef long double ld; typedef pair<int, int> pii; int n, cnt; int deg[maxn], dep[maxn]; bool edge[maxn], found; vector<int> cycles; vector<pii> adj[maxn]; void Init(int N) { n = N; for(int i = 0; i < maxn; i++){ deg[i] = 0; adj[i].clear(); } } void Link(int A, int B){ deg[A]++; deg[B]++; adj[A].pb(mp(B, ++cnt)); adj[B].pb(mp(A, cnt)); // cout << "ok link" << endl; } void DFS(int x, int p){ if(found) return; for(pii v : adj[x]){ if(found || v.fi == p || edge[v.se]) continue; if(dep[v.fi]){ cycles.pb(dep[x] - dep[v.fi] + 1); found = 1; } if(!dep[v.fi]){ dep[v.fi] = dep[x] + 1; DFS(v.fi, x); } } } void checkCycles(){ cycles.clear(); memset(dep, 0, sizeof(dep)); for(int i = 0; i < n; i++){ if(cycles.size() >= 2) return; if(!dep[i]){ found = 0; dep[i] = 1; DFS(i, -1); } } } bool check(int x){ for(pii v : adj[x]){ edge[v.se] = 1; deg[v.fi]--; } bool ret = 1; for(int i = 0; i < n; i++){ if(i != x && deg[i] > 2){ ret = 0; break; } } if(ret) checkCycles(); ret &= (cycles.size() == 0); for(pii v : adj[x]){ edge[v.se] = 0; deg[v.fi]++; } return ret; } int CountCritical(){ // cout << "ok count" << endl; int sz[5], v[5]; memset(sz, 0, sizeof(sz)); int max_degree = 0; for(int i = 0; i < n; i++){ int cur = min(deg[i], 4); max_degree = max(max_degree, cur); v[cur] = i; sz[cur]++; } if(max_degree <= 1) return n; if(max_degree == 2){ checkCycles(); if(cycles.size() > 1) return 0; if(cycles.size() == 1) return cycles[0]; return n; } if(max_degree == 3){ int ans = check(v[3]); for(pii x : adj[v[3]]) ans += check(x.fi); return ans; } if(max_degree == 4){ if(sz[4] > 1) return 0; int ans = check(v[4]); return ans; } }

Compilation message (stderr)

rings.cpp: In function 'int CountCritical()':
rings.cpp:150:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#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...