C++ 实现 Z 国军队驻扎问题求解
以下是使用 C++ 实现上述问题的代码: ```cpp #include <iostream> #include <vector> #include <cstring> #include <algorithm> #define INF 0x3f3f3f3f using namespace std; const int MAXN = 100005; // 存储图的邻接表 vector<int> adj[MAXN]; // 存储每个城市的花费 int p[MAXN]; // 动态规划数组,dp[i][0] 表示第 i 个城市不驻扎军队的最小花费,dp[i][1] 表示第 i 个城市驻扎军队的最小花费 int dp[MAXN][2]; // 标记城市是否有驻扎要求 int req[MAXN]; // 深度优先搜索函数,用于计算最小花费 void dfs(int u, int fa) { // 初始化当前城市不驻扎军队和驻扎军队的花费 dp[u][0] = 0; dp[u][1] = p[u]; for (int v : adj[u]) { if (v == fa) continue; dfs(v, u); // 如果当前城市不驻扎军队,那么相邻城市必须驻扎军队 dp[u][0] += dp[v][1]; // 如果当前城市驻扎军队,相邻城市可以驻扎也可以不驻扎,取最小值 dp[u][1] += min(dp[v][0], dp[v][1]); } // 如果当前城市有不驻扎军队的要求,将驻扎军队的花费设为无穷大 if (req[u] == 0) dp[u][1] = INF; // 如果当前城市有驻扎军队的要求,将不驻扎军队的花费设为无穷大 if (req[u] == 1) dp[u][0] = INF; } int main() { int n, m; string type; cin >> n >> m >> type; // 输入每个城市的花费 for (int i = 1; i <= n; i++) { cin >> p[i]; } // 构建图 for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } // 处理每个要求 for (int i = 0; i < m; i++) { int a, x, b, y; cin >> a >> x >> b >> y; // 初始化要求标记数组 memset(req, -1, sizeof(req)); req[a] = x; req[b] = y; // 进行深度优先搜索 dfs(1, 0); // 计算最小花费 int ans = min(dp[1][0], dp[1][1]); // 如果最小花费为无穷大,说明无法满足要求 if (ans >= INF) ans = -1; cout << ans << endl; } return 0; } ``` ### 代码解释: 1. **图的构建**:使用邻接表 `adj` 存储图的结构,通过 `n - 1` 条边构建无向图。 2. **动态规划数组**:`dp[i][0]` 表示第 `i` 个城市不驻扎军队的最小花费,`dp[i][1]` 表示第 `i` 个城市驻扎军队的最小花费。 3. **深度优先搜索**:在 `dfs` 函数中,递归计算每个城市不驻扎和驻扎军队的最小花费。 4. **处理要求**:对于每个要求,使用 `req` 数组标记城市是否有驻扎要求,然后重新进行深度优先搜索计算最小花费。 5. **输出结果**:如果最小花费为无穷大,说明无法满足要求,输出 `-1`;否则输出最小花费。 ######[AI问答 | 919点数解答 | 2026-05-30 20:25:49]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)401
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)365
- 浙闽“板凳龙”舞龙队 300 秒螺线盘入:位置与速度全揭秘(阿里通义 | 886点数解答 | 2024-09-07 10:31:31)666
- 浙闽“板凳龙”舞龙队 300 秒位置与速度数学模型揭秘(GPT | 565点数解答 | 2024-09-07 10:32:56)558
- 223节板凳龙沿等距螺线盘入:300秒内位置与速度的数学揭秘 (讯飞星火 | 443点数解答 | 2024-09-07 10:34:10)409
- 浙闽“板凳龙”300秒舞龙轨迹与速度:数学模型揭秘!(字节豆包 | 522点数解答 | 2024-09-07 10:35:06)377
- Excel 销售数据难题:2024 年 Q3 及特定时段销售情况计算全攻略(字节豆包 | 762点数解答 | 2024-11-06 19:11:51)216
- 从封闭到觉醒:中国在西方文化冲击下的曲折蜕变(讯飞星火 | 331点数解答 | 2024-11-30 21:50:57)222
- 陈独秀〈吾人最后之觉悟〉:文化冲突下的觉醒与奋进之路(百度文心 | 458点数解答 | 2024-11-30 21:51:52)227
- 从文化冲突到国民觉悟:中国近代变革的觉醒之路( | 21点数解答 | 2024-11-30 21:52:33)220
- Python:生成含随机缺失值二维数组并处理,附随机选元素赋缺失值代码解析(阿里通义 | 300点数解答 | 2025-03-13 20:19:30)237
- 破解“没有3的世界”:找出第n个合规正整数!(DeepSeek | 471点数解答 | 2025-03-17 14:32:58)273