Loading [MathJax]/jax/element/mml/optable/BasicLatin.js
一名苦逼的OIer,想成为ACMer

Iowa_Battleship

洛谷1041 传染病控制

原题链接

爆搜题。
有个很显然的贪心,就是第i轮扩展肯定是删去ii+1层上的某一条边。
另外,贪心地删除含子节点最多的点是错误的,比如一条很长的链和一个比链节点少一点但是全部分布在一层,这样就是错误的。
所以我们爆搜的枚举删去这一层的哪个点,并累加上以该点为根的子树大小,然后继续搜下一层,同时将上一层被删去的点扩展到这一层,即上一层被删去的点所在子树都不会被感染,按层标记下来。
每次搜索的结果就是n减去所有被删去的点,答案对每次搜索结果取min即可。

#include<cstdio>
using namespace std;
const int N = 310;
const int M = 620;
int fi[N], di[M], ne[M], de[N][N], L[N], fa[N], si[N], l, mi = 1e9;
bool v[N];
inline int re()
{
	int x = 0;
	char c = getchar();
	bool p = 0;
	for (; c < '0' || c > '9'; c = getchar())
		p |= c == '-';
	for (; c >= '0' && c <= '9'; c = getchar())
		x = x * 10 + c - '0';
	return p ? -x : x;
}
inline int minn(int x, int y) { return x < y ? x : y; }
inline void add(int x, int y)
{
	di[++l] = y; ne[l] = fi[x]; fi[x] = l;
	di[++l] = x; ne[l] = fi[y]; fi[y] = l;
}
void dfs_1(int x, int f, int d)//初始化子树大小、该层的节点和每个点的父亲。
{
	int i, y;
	si[x] = 1;
	de[d][++L[d]] = x;
	fa[x] = f;
	for (i = fi[x]; i; i = ne[i])
		if ((y = di[i]) ^ f)
		{
			dfs_1(y, x, d + 1);
			si[x] += si[y];
		}
}
void dfs_2(int nw, int s)
{
	mi = minn(mi, s);
	if (!L[nw])
		return;
	int i, x, k = 0;
	for (i = 1; i <= L[nw]; i++)//扩展被删去的点
		if (v[fa[x = de[nw][i]]])
			v[x] = 1, k++;
	if (!(k ^ L[nw]))//如果这一层均被删去,那么就不用往下搜了
		return;
	for (i = 1; i <= L[nw]; i++)//枚举删点
	{
		x = de[nw][i];
		if (v[x])
			continue;
		v[x] = 1;
		dfs_2(nw + 1, s - si[x]);
		v[x] = 0;
	}
	for (i = 1; i <= L[nw]; i++)//回溯
		if (v[fa[x = de[nw][i]]])
			v[x] = 0;
}
int main()
{
	int i, x, y, n, m;
	n = re(); m = re();
	for (i = 1; i <= m; i++)
	{
		x = re(); y = re();
		add(x, y);
	}
	dfs_1(1, 0, 1);
	dfs_2(2, n);
	printf("%d", mi);
	return 0;
}

posted on   Iowa_Battleship  阅读(149)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示