当前位置: 首页 > article >正文

树型DP # 战略游戏

文章目录

  • 原题链接
  • 题目解读
  • 完整代码
  • 参考

原题链接


题目解读

在这里插入图片描述

f[u][0] 表示 u点上不放士兵的最小花费

f[u][1] 表示 u点上放士兵的最小花费

如果u点不放士兵,那么其子节点必须放士兵,不然这两条边不能同时被瞭望

如果u点放士兵,那么其子节点可放可不放,取min计算即可

完整代码

//这里是引入了一些常用的头文件,和一些常规操作
//第一行是因为该死的编译器不让直接用scanf
#define _CRT_SECURE_NO_WARNINGS 1
#define _USE_MATH_DEFINES //启用M_PI的定义
#include<algorithm>
#include<iostream>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#define MAX 0x3f3f3f3f
#define MIN -0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

const int N = 1510;
int e[N], ne[N], h[N],idx;
int n, f[N][2];
bool st[N];

void add(int a, int b) {
	e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

void dfs(int u, int fa) {
	f[u][0] = 0;
	f[u][1] = 1;

	for (int i = h[u]; ~i; i = ne[i]) {
		int j = e[i];
		if (j == fa)continue;
		dfs(j, u);
		f[u][0] += f[j][1];
		f[u][1] += min(f[j][0],f[j][1]);
	}
}

int main() {
	memset(h, -1, sizeof h);

	cin >> n;
	for (int i = 1; i <= n; i++) {
		int id, cnt;
		cin >> id >> cnt;
		while (cnt--) {
			int ver;
			cin >> ver;
			add(id, ver);
			st[ver] = true;
		}
	}

	int root = 0;
	while (st[root])root++;

	dfs(root,-1);

	cout << min(f[root][0], f[root][1]);

	return 0;
}


参考

本篇文章参考于 ACWING算法平台
董晓算法
感谢🌹


🌻编写本篇文章目的是笔者想以输出的形式进行学习,顺便记录学习点滴🌻

🌹 如果本篇文章对你有帮助的话那就点个赞吧👍🌹

😇 本篇文章可能存在多处不足,如有修改意见,可以私信或者评论我哦 😇


在这里插入图片描述


http://www.kler.cn/a/463930.html

相关文章:

  • 【小程序开发】- 小程序版本迭代指南(版本发布教程)
  • 17爬虫:关于DrissionPage相关内容的学习01
  • Unity3D 基于GraphView实现的节点编辑器框架详解
  • 华为ensp-BGP路由过滤
  • Web安全 - “Referrer Policy“ Security 头值不安全
  • SpringCloudAlibaba实战入门之路由网关Gateway过滤器(十三)
  • 【JS】期约的Promise.all()和 Promise.race()区别
  • MySQL SQL元查询详解(10k,含运行实例、分析)
  • 验证二叉搜索树
  • LeetCode-最长公共前缀(014)
  • 闯关leetcode——3136. Valid Word
  • C++软件设计模式之责任链模式
  • 【2024年-12月-18日-开源社区openEuler实践记录】openeuler - jenkins:开源项目持续集成与交付的幕后引擎
  • OpenCV调整图像亮度和对比度
  • 【NLP高频面题 - LLM训练篇】为什么要对LLM做有监督微调(SFT)?
  • 使用apisix+oidc+casdoor配置微服务网关
  • 第二讲 比特币的技术基础
  • GPU 进阶笔记(三):华为 NPU/GPU 演进
  • 【Spring MVC 异常处理机制】应对意外情况
  • Pandas-数据分组
  • Seata AT 模式两阶段过程原理解析【seata AT模式如何做到对业务的无侵入】
  • 前端:轮播图常见的几种实现方式
  • CSS 实现无限滚动的列表
  • Unity+Hybridclr发布WebGL记录
  • 自动化运维脚本的最佳设计模式与开发指南
  • css的长度单位有那些?