HELP ME!!!
查看原帖
HELP ME!!!
1054952
zzCX_df楼主2024/7/27 10:30
#include <bits/stdc++.h>

using namespace std;

pair<int, int> f[151][2];
int n, p, ans = INT_MAX, s[151], fa[151];
bool b[151];
vector<int> q[151];

inline int dfs(int p) {
    s[p] = 1;
    for (auto y : q[p])
        s[p] += dfs(y);
    return s[p];
}

inline void processing(int p, int cnt, int sum) {
    bool ok = true;
    int u = p;
    while (fa[u]) {
        if (b[fa[u]]) {
            ok = false;
            break;
        }
        u = fa[u];
    }

    if (!ok && b[p])
        return;
    if (sum > p)
        return;
    if (sum == p) {
        printf("%d %d\n", ans, sum);
        ans = min(ans, cnt);
        return;
    }
    for (auto y : q[p]) {
        b[y] = 0;
        processing(y, cnt, sum);
        b[y] = 1;
        int u = y, v = s[y];
        s[y] = 0;
        while (fa[u]) {
            s[fa[u]] -= s[y];
            u = fa[u];
        }
        processing(y, cnt + 1, sum + v);
        u = y, s[y] = v;
        while (fa[u]) {
            s[fa[u]] += s[y];
            u = fa[u];
        }   
    }
}

int main() {
    scanf("%d%d", &n, &p);
    for (int i = 1; i < n; i++) {
        int u, v;
        scanf("%d%d", &u, &v);
        q[u].push_back(v);
        fa[v] = u;
    } 
    dfs(1);
    processing(1, 0, 0);
    printf("%d\n", ans);
    return 0;
}
2024/7/27 10:30
加载中...