이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int k_N = 1e6 + 3;
int n;
int p[k_N], sz[k_N];
vector<int> adj[k_N], adj2[k_N];
int cnt[k_N], req;
bool ok;
int get_p(int u){
if(p[u] == u) return u;
return p[u] = get_p(p[u]);
}
bool unite(int u, int v){
if(get_p(u) == get_p(v))
return false;
if(sz[p[u]] < sz[p[v]])
swap(u, v);
sz[p[u]] += sz[p[v]];
p[p[v]] = p[u];
return true;
}
void Init(int n_){
n = n_;
for(int i = 0; i < n; ++i){
p[i] = i;
sz[i] = 1;
cnt[i] = 0;
adj[i].clear();
adj2[i].clear();
}
req = 0;
ok = true;
}
bool dfs(int a, int b, int parent = -1){
if(a == b){
cnt[a]++;
return true;
}
for(int to: adj[a]){
if(to == parent) continue;
if(dfs(to, b, a)){
cnt[a]++;
return true;
}
}
return false;
}
void Link(int a, int b){
adj2[a].push_back(b);
adj2[b].push_back(a);
if(adj2[a].size() >= 4 || adj2[b].size() >= 4) ok = false;
if(adj2[a].size() == 3){
req++;
cnt[a]++;
}
if(adj2[b].size() == 3){
req++;
cnt[b]++;
}
if(!unite(a, b)){
req++;
dfs(a, b);
}
else{
adj[a].push_back(b);
adj[b].push_back(a);
}
}
int CountCritical(){
if(!ok) return 0;
int ans = 0;
for(int i = 0; i < n; ++i){
int curr_req = cnt[i];
for(int to: adj2[i])
curr_req += (adj2[to].size() == 3);
ans += (req == curr_req);
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |