社区讨论
求助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 条回复,欢迎继续交流。
正在加载回复...