Submission #1042742

#TimeUsernameProblemLanguageResultExecution timeMemory
1042742pawnedParachute rings (IOI12_rings)C++17
20 / 100
4038 ms1052 KiB
#pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops") #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back typedef long long ll; typedef pair<int, int> ii; typedef vector<int> vi; const int MAX = 5005; int N; vi adj[MAX]; void Init(int N_) { N = N_; } void Link(int A, int B) { adj[A].pb(B); adj[B].pb(A); } int CountCritical() { int total = 0; for (int i = 0; i < N; i++) { // try removing each vertex, make new adj // to check, ensure no adj cnt is >= 2 // and N - edge_cnt equals number of ccs // removed link is a chain itself vi adjc[N]; int cnt = 0; for (int j = 0; j < N; j++) { if (j == i) continue; for (int k : adj[j]) { if (k != i) { adjc[j].pb(k); cnt++; } } } cnt /= 2; int maxc = 0; for (int j = 0; j < N; j++) { maxc = max(maxc, (int)(adjc[j].size())); } // cout<<"cnt, maxc: "<<cnt<<" "<<maxc<<endl; int ccs = 0; vector<bool> vis(N, false); for (int j = 0; j < N; j++) { if (!vis[j]) { ccs++; queue<int> q; q.push(j); vis[j] = true; while (!q.empty()) { int x = q.front(); q.pop(); for (int y : adjc[x]) { if (!vis[y]) { q.push(y); vis[y] = true; } } } } } // cout<<"ccs: "<<ccs<<endl; if ((maxc <= 2) && (N - cnt == ccs)) total++; } return total; }
#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...