제출 #350773

#제출 시각아이디문제언어결과실행 시간메모리
350773amunduzbaev낙하산 고리들 (IOI12_rings)C++14
20 / 100
4059 ms948 KiB
#ifndef EVAL
#include "grader.cpp"
#endif

#include "bits/stdc++.h"
using namespace std;

#define pb push_back
#define ss second
#define ff first

const int N = 5e3+5;
int n;
vector<pair<int, int>> edges[N];
int used[N], vis[N];

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

int last;
void Link(int A, int B) {
	edges[A].pb({B, ++last});
	edges[B].pb({A, last});
}

bool dfs(int u, int p){
	if(vis[u]) return 0;
	int cnt = 0;
	bool ok = 1;
	vis[u] = 1;
	for(auto x:edges[u]){
		if(used[x.ss] || x.ff == p) continue;
		if(cnt) return 0;
		cnt++; 
		ok &= dfs(x.ff, u);
	}return ok;
}

int CountCritical(){
	memset(used, 0, sizeof used);
	int cnt = 0;
	for(int i=0;i<n;i++){
		for(auto x:edges[i]) used[x.ss] = 1;
		vis[i] = 1;
		bool ok = 1;
		for(int j=0;j<n && ok;j++){
			if(!vis[j]){
				int cnt = 0;
				for(auto x:edges[j]){
					if(used[x.ss]) continue;
					cnt++;
					ok &= dfs(x.ff, j);
				}
				if(cnt > 2) ok = 0;
			}
		}
		for(auto x:edges[i]) used[x.ss] = 0;
		memset(vis, 0, sizeof vis);
		cnt += ok;
	} 
	return cnt;
}

/*

7 13 
-1
1 2 
-1
0 5 
-1
2 0 
-1
3 2 
-1
3 5 
-1
4 3 
-1


*/
#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...