Pagini recente »
Istoria paginii utilizator/mocanudaria
|
Istoria paginii runda/simulareoni2022editia2/clasament
|
Cod sursă (job #664088)
|
Clasament amchef
|
Cod sursă (job #664030)
Cod sursă (job
#664030)
#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() {
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);
in[j] ++;
}
for (int i = 1; i <= n; ++ i)
d[i] = 2;
while (!Empty()) {
int arg;
for (int i = 1; i <= n; ++ i)
if (f[i] == false)
arg = i;
DFS(arg);
++ cnt;
}
fout << cnt;
return 0;
}