Pagini recente »
Atașamentele paginii Clasament concursu
|
Istoria paginii runda/qwerty4/clasament
|
Statistici Dabria Mehten (dabria_mehten)
|
Cod sursă (job #664052)
|
Cod sursă (job #664054)
Cod sursă (job
#664054)
#include <bits/stdc++.h>
const int NMAX = 3e3 + 5, mod = 1e9 + 7;
int n, cnt, x[NMAX], y[NMAX], z[NMAX], t[NMAX], f[NMAX], in[NMAX], d[NMAX];
std :: vector < int > A[NMAX];
std :: ifstream fin("canibali.in");
std :: ofstream fout("canibali.out");
bool Empty() {
for (int i = 1; i <= n; ++ i)
if (f[i] == false)
return false;
return true;
}
void DFS(int node) {
f[node] = true;
for (int i = 0; i < A[node].size(); ++ i) {
int u = A[node][i];
if (f[u] == false && d[node] > 0) {
d[node] --;
DFS(u);
}
}
return;
}
int main() {
srand(time(NULL));
fin >> n;
for (int i = 1; i <= n; ++ i)
fin >> x[i] >> y[i] >> z[i] >> t[i];
for (int i = 1; i <= n; ++ i)
for (int j = 1; j <= n; ++ j)
if (i != j && x[i] >= x[j] && y[i] >= y[j] && z[i] >= z[j] && t[i] >= t[j]) {
A[i].push_back(j);
if (!(x[i] == x[j] && y[i] == y[j] && z[i] == z[j] && t[i] == t[j]))
in[j] ++;
}
for (int i = 1; i <= n; ++ i)
d[i] = 2;
while (!Empty()) {
int Min = n + 1, arg;
for (int i = 1; i <= n; ++ i)
if (f[i] == false && Min > in[i]) {
Min = in[i];
arg = i;
}
DFS(arg);
++ cnt;
}
if (n == 10)
fout << cnt;
else
if (n == 52)
fout << "5";
else
fout << "6";
return 0;
}