Submission #1149710

#TimeUsernameProblemLanguageResultExecution timeMemory
1149710SofiatpcParachute rings (IOI12_rings)C++20
20 / 100
4096 ms97940 KiB
#include <bits/stdc++.h>

using namespace std;

#define sz(v) (int)v.size()
#define fi first
#define sc second
const int MAXN = 1e6+5;
vector<int> adj[MAXN];
int v[MAXN], p[MAXN], tam[MAXN], dist[MAXN], n, qtd;
vector< pair<int,int> > b;

void Init(int N_) {
  n = N_;
}

void Link(int a, int b) {
  adj[a].push_back(b);
  adj[b].push_back(a);
}

void dfs(int s){
  vector<int> temp;
  for(int viz : adj[s])
    if(dist[viz] && dist[viz] < dist[s] && viz != p[s]){
      for(int j = sz(b)-1; j >= 0; j--){
        if(dist[b[j].fi] < dist[viz])break;
        if(dist[b[j].sc] < dist[viz]){
          v[s]++; v[viz]++;
          v[p[b[j].fi]]--;
          if(p[b[j].sc] != -1)v[p[b[j].sc]]--;
        }else{
          v[s]++; 
          if(p[viz] != -1)v[viz]--;
          v[p[b[j].fi]]--;
          v[b[j].sc]++;
        }
        qtd++;
      }

      v[s]++;
      if(p[viz] != -1)v[p[viz]]--;
      qtd++;
      temp.push_back(viz);
    }

  for(int i = 0; i < sz(temp); i++)b.emplace_back(s,temp[i]);

  for(int viz : adj[s])
    if(!dist[viz]){
      p[viz] = s;
      dist[viz] = dist[s]+1;
      dfs(viz);
      v[s] += v[viz];
    }
  
  for(int i = 0; i < sz(temp); i++)b.pop_back();
    
}

int CountCritical() {
  qtd = 0;
  for(int i = 0; i < n; i++){
    dist[i] = 0;
    v[i] = 0;
    p[i] = -1;
  }

  for(int i = 0; i < n; i++)
    if(!dist[i]){
      dist[i] = 1;
      dfs(i);
    }

  for(int i = 0; i < n; i++){
    if(sz(adj[i]) >= 4){
      qtd++; v[i]++;
    }else if(sz(adj[i]) == 3){
      qtd++; v[i]++;
      for(int viz : adj[i])v[viz]++;
    }
  }

  int ans = 0;
  for(int i = 0; i < n; i++)
    if(v[i] == qtd)ans++;

  return ans;
}
#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...