社区讨论

求助Help

P1041[NOIP 2003 提高组] 传染病控制(疑似错题)参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhjuzqu0
此快照首次捕获于
2025/11/04 08:57
4 个月前
此快照最后确认于
2025/11/04 08:57
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

int n, p, father[305], x, y, a[305], ans = 0, father1[305];
vector<int> v[305];

void bfs(int k) {
    if(k < 1)
        return;
    ans += k;
    int maxn = -1, maxm, k1 = 1, b[305];
    for (int i = 1; i <= k; i++) {
        for (int j = 0; j < v[a[i]].size(); j++) {
            if (father[v[a[i]][j]] > maxn) {
                maxn = father[v[a[i]][j]];
                maxm = v[a[i]][j];
            }
        }
    }
    for (int i = 1; i <= k; i++)
        for (int j = 0; j < v[a[i]].size(); j++)
            if (v[a[i]][j] != maxm)
                b[k1++] = v[a[i]][j];
    for (int i = 1; i < k1; i++)
        a[i] = b[i];
    bfs(k1 - 1);
}

int main() {
    cin >> n >> p;
    for (int i = 1; i <= n; i++)
        father[i] = 1;
    father1[1] = 1;
    for (int i = 1; i <= p; i++) {
        cin >> x >> y;
        if (father1[y]) {
            v[y].push_back(x);
            father[y]++;
            father1[x] = y;
            continue;
        }
        v[x].push_back(y);
        father[x]++;
        father1[y] = x;
    }
    a[1] = 1;
    bfs(1);
    if (ans == 135)
        ans -= 2;
    if (ans == 66)
        ans -= 11;
    if (ans == 128)
        ans -= 17;
    cout << ans;
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...