답안 #575889

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
575889 2022-06-11T13:46:31 Z arneves 낙하산 고리들 (IOI12_rings) C++17
55 / 100
4000 ms 94552 KB
/*
	  ______  _____  _______ _     _ _______ __   _  _____  _  _  _
	 |_____/ |     | |       |____/  |______ | \  | |     | |  |  |
	 |    \_ |_____| |_____  |    \_ ______| |  \_| |_____| |__|__|
	
	
	       .      .           .      .           .      .    	
	       _\/  \/_           _\/  \/_           _\/  \/_    	
	        _\/\/_             _\/\/_             _\/\/_     	
	    _\_\_\/\/_/_/_     _\_\_\/\/_/_/_     _\_\_\/\/_/_/_ 	
	     / /_/\/\_\ \       / /_/\/\_\ \       / /_/\/\_\ \  	
	        _/\/\_             _/\/\_             _/\/\_     	
	        /\  /\             /\  /\             /\  /\     	
	       '      '           '      '           '      '    	
	
*/
 
#pragma GCC optimize ("O3")
#pragma GCC target ("avx2")
 
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <climits>
#include <cstdint>
#include <cmath>
#include <chrono>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <unordered_set>
#include <unordered_map>
#include <vector>
 
using namespace std;
typedef long long ll;

class DSU //with range compression and union by subtree size
{
	public:
	ll N;
	vector<ll> p,siz;
	
	DSU(ll n)
	{
		N=n; for(int i=0; i<N; i++){p.push_back(i); siz.push_back(1);}
	}
	
	ll find(ll x)
	{
		if(p[x]==x) {return x;}
		ll ans=find(p[x]);
		p[x]=ans; 
		return ans;
	}
	
	void unionn(ll a, ll b)
	{
		a=find(a); b=find(b);
		if(a==b) {return;}
		if(siz[a]>siz[b]) {swap(a,b);}
		p[a]=b; siz[b]+=siz[a];
	}
};

const int MX=1e6+5;
int n;
vector<int> adj[MX];
int visitados[MX];
int grau[MX];
int ciclos=0;
vector<int> gajos_no_ciclo;
vector<int> cand;
vector<int> grau3;
vector<int> grau4;
DSU dsu(MX);

void Init(int N){
	n=N;
	for(int i=0; i<n; i++) grau[i]=0;
}

int dfs2(int s, int p, int t){
	int ans=0;
	for(auto u: adj[s]){
		if(u!=p){
			if(u==t){
				ans++;
			}else{
				ans+=dfs2(u,s,t);
			}
		}
	}
	if(ans){
		gajos_no_ciclo.push_back(s);
		return 1;
	}else{
		return 0;
	}
}

void Link(int A, int B){
	adj[A].push_back(B);
	adj[B].push_back(A);
	grau[A]++;
	grau[B]++;
	if(dsu.find(A)==dsu.find(B)){
		if(ciclos==0){
			dfs2(A,-1,B);
			gajos_no_ciclo.push_back(B);
		}
		ciclos++;
	}
	
	dsu.unionn(A,B);
	
	if(grau[A]==3){
		grau3.push_back(A);
		for(auto u: adj[A]) cand.push_back(u);
	}
	if(grau[B]==3){
		grau3.push_back(B);
		for(auto u: adj[B]) cand.push_back(u);
	}
	if(grau[A]==4){
		grau4.push_back(A);
	}
	if(grau[B]==4){
		grau4.push_back(B);
	}
}

int dfs(int s, int p, int pro){
	visitados[s]=1;
	int ans=0;
	for(auto u: adj[s]){
		if(u!=p && u!=s && u!=pro){
			if(visitados[u]) return 1;
			else ans+=dfs(u,s,pro);
		}
	}
	return ans>0;
}

int f(int u){
	for(int i=0; i<n; i++){
		if(i==u) continue;
		vector<int> v;
		for(auto y: adj[i]) if(y!=u) v.push_back(y);
		if(v.size()>2) return 0;
	}
	for(int i=0; i<n; i++) visitados[i]=0;
	for(int i=0; i<n; i++){
		if(i!=u && !visitados[i]){
			if(dfs(i,-1,u)){
				return 0;
			}
		}
	}
	return 1;
}

int CountCritical(){
	if(grau4.size()>=2) return 0;
	if(grau4.size()==1) return f(grau4[0]);
	if(grau3.size()>=5) return 0;
	if(grau3.size()>0){
		int ans=0;
		set<int> s;
		for(auto u: cand) s.insert(u);
		for(auto u: grau3) s.insert(u); 
		for(auto u: s) if(f(u)) ans++;
		return ans;
	}
	if(ciclos>=2){
		return 0;
	}
	if(ciclos==1){
		return gajos_no_ciclo.size();
	}
	
	/*int ans=0;
	for(int i=0; i<n; i++) if(f(i)) ans++;//, cout<<i<<" ";*/
	
	return n;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39672 KB Output is correct
2 Correct 31 ms 39848 KB Output is correct
3 Correct 34 ms 39804 KB Output is correct
4 Correct 31 ms 39720 KB Output is correct
5 Correct 29 ms 39772 KB Output is correct
6 Correct 31 ms 39928 KB Output is correct
7 Correct 29 ms 39660 KB Output is correct
8 Correct 31 ms 39712 KB Output is correct
9 Correct 32 ms 39892 KB Output is correct
10 Correct 31 ms 39848 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 382 ms 57920 KB Output is correct
2 Correct 1054 ms 70928 KB Output is correct
3 Correct 912 ms 76224 KB Output is correct
4 Correct 988 ms 74652 KB Output is correct
5 Correct 991 ms 75552 KB Output is correct
6 Correct 1076 ms 94552 KB Output is correct
7 Correct 882 ms 75812 KB Output is correct
8 Correct 1659 ms 76568 KB Output is correct
9 Correct 1674 ms 79040 KB Output is correct
10 Correct 671 ms 72976 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39672 KB Output is correct
2 Correct 31 ms 39848 KB Output is correct
3 Correct 34 ms 39804 KB Output is correct
4 Correct 31 ms 39720 KB Output is correct
5 Correct 29 ms 39772 KB Output is correct
6 Correct 31 ms 39928 KB Output is correct
7 Correct 29 ms 39660 KB Output is correct
8 Correct 31 ms 39712 KB Output is correct
9 Correct 32 ms 39892 KB Output is correct
10 Correct 31 ms 39848 KB Output is correct
11 Correct 57 ms 39824 KB Output is correct
12 Correct 45 ms 40112 KB Output is correct
13 Correct 112 ms 39992 KB Output is correct
14 Correct 60 ms 39932 KB Output is correct
15 Correct 57 ms 40008 KB Output is correct
16 Correct 36 ms 39920 KB Output is correct
17 Correct 32 ms 40016 KB Output is correct
18 Correct 33 ms 40096 KB Output is correct
19 Correct 31 ms 40032 KB Output is correct
20 Correct 113 ms 40012 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39672 KB Output is correct
2 Correct 31 ms 39848 KB Output is correct
3 Correct 34 ms 39804 KB Output is correct
4 Correct 31 ms 39720 KB Output is correct
5 Correct 29 ms 39772 KB Output is correct
6 Correct 31 ms 39928 KB Output is correct
7 Correct 29 ms 39660 KB Output is correct
8 Correct 31 ms 39712 KB Output is correct
9 Correct 32 ms 39892 KB Output is correct
10 Correct 31 ms 39848 KB Output is correct
11 Correct 57 ms 39824 KB Output is correct
12 Correct 45 ms 40112 KB Output is correct
13 Correct 112 ms 39992 KB Output is correct
14 Correct 60 ms 39932 KB Output is correct
15 Correct 57 ms 40008 KB Output is correct
16 Correct 36 ms 39920 KB Output is correct
17 Correct 32 ms 40016 KB Output is correct
18 Correct 33 ms 40096 KB Output is correct
19 Correct 31 ms 40032 KB Output is correct
20 Correct 113 ms 40012 KB Output is correct
21 Correct 43 ms 40772 KB Output is correct
22 Correct 52 ms 41400 KB Output is correct
23 Correct 63 ms 42028 KB Output is correct
24 Execution timed out 4082 ms 40784 KB Time limit exceeded
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 39672 KB Output is correct
2 Correct 31 ms 39848 KB Output is correct
3 Correct 34 ms 39804 KB Output is correct
4 Correct 31 ms 39720 KB Output is correct
5 Correct 29 ms 39772 KB Output is correct
6 Correct 31 ms 39928 KB Output is correct
7 Correct 29 ms 39660 KB Output is correct
8 Correct 31 ms 39712 KB Output is correct
9 Correct 32 ms 39892 KB Output is correct
10 Correct 31 ms 39848 KB Output is correct
11 Correct 382 ms 57920 KB Output is correct
12 Correct 1054 ms 70928 KB Output is correct
13 Correct 912 ms 76224 KB Output is correct
14 Correct 988 ms 74652 KB Output is correct
15 Correct 991 ms 75552 KB Output is correct
16 Correct 1076 ms 94552 KB Output is correct
17 Correct 882 ms 75812 KB Output is correct
18 Correct 1659 ms 76568 KB Output is correct
19 Correct 1674 ms 79040 KB Output is correct
20 Correct 671 ms 72976 KB Output is correct
21 Correct 57 ms 39824 KB Output is correct
22 Correct 45 ms 40112 KB Output is correct
23 Correct 112 ms 39992 KB Output is correct
24 Correct 60 ms 39932 KB Output is correct
25 Correct 57 ms 40008 KB Output is correct
26 Correct 36 ms 39920 KB Output is correct
27 Correct 32 ms 40016 KB Output is correct
28 Correct 33 ms 40096 KB Output is correct
29 Correct 31 ms 40032 KB Output is correct
30 Correct 113 ms 40012 KB Output is correct
31 Correct 43 ms 40772 KB Output is correct
32 Correct 52 ms 41400 KB Output is correct
33 Correct 63 ms 42028 KB Output is correct
34 Execution timed out 4082 ms 40784 KB Time limit exceeded
35 Halted 0 ms 0 KB -