#include<stdio.h> #include<vector> #include<algorithm> using namespace std; int n, rev[1000]; bool ck[2000]; vector<int> adj[1000]; struct st { int a, b, c; }s[1000]; bool dfs(int h) { if (ck[h]) return false; ck[h] = true; for (auto t : adj[h / 2]) { if (rev[t] == -1 || dfs(rev[t])) { rev[t] = h; return true; } } return false; } int main() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d %d %d", &s[i].a, &s[i].b, &s[i].c); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (s[j].a == s[i].a&&s[j].b == s[i].b&&s[j].c == s[i].c) { if (i < j) adj[i].push_back(j); } else if (s[j].a <= s[i].a && s[j].b <= s[i].b && s[j].c <= s[i].c) adj[i].push_back(j); int res = n; fill(rev, rev + n, -1); for (int i = 0; i < 2 * n; i++) { fill(ck, ck + 2 * n, false); if (dfs(i)) res--; } printf("%d", res); return 0; }
1671번: 상어의 저녁식사
https://www.acmicpc.net/problem/1671
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기