페이지

1671번: 상어의 저녁식사

https://www.acmicpc.net/problem/1671


#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;
}

댓글 없음 :

댓글 쓰기