CF-346 D. Robot Control(反向建图spfa)

CF-346 D. Robot Control(反向建图spfa)

题目链接

题意

有向图(有环)中有一个机器人,机器人有三种规则:

  1. 重复访问同一个点会自我销毁
  2. 无路可走会自我销毁
  3. 多岔路口会随机选择

为了让机器人安全的从 S S S T T T,可以在多岔路口制定它的方向来避免情况1,2的发生,求最少需要指定方向几次

思路

有一个转移方程:

对于点 u u u和它所有的出边 v v v, d p [ u ] dp[u] dp[u]表示从 u u u点到 T T T最少需要指定方向的次数

d p [ u ] = m i n ( m i n ( d p [ v ] ) + 1 , m a x ( d p [ v ] ) ) dp[u] = min(min(dp[v]) + 1, max(dp[v])) dp[u]=min(min(dp[v])+1,max(dp[v]))

  1. 反向建图,从终点 T T T出发
  2. 第一次访问 v v v d p [ v ] = d p [ u ] + 1 dp[v] = dp[u] + 1 dp[v]=dp[u]+1, 将点v加到队尾最后更新其他点
  3. 最后一次访问 v v v d p [ v ] = m i n ( d p [ v ] , d p [ u ] ) dp[v] = min(dp[v], dp[u]) dp[v]=min(dp[v],dp[u]), 将点v加到队首优先更新其他点

这题用 c i n cin cin很慢不知道为啥…(CF不是不卡读入吗?)

#include <bits/stdc++.h>
const int maxn = 1e6 + 5;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
using namespace std;
int in[maxn], dp[maxn], vis[maxn];
vector<int> g[maxn];
void bfs(int s, int e) {
  fill(dp, dp+maxn, -1);
  fill(vis, vis+maxn, 0);
  deque<int> que;
  que.push_back(e);
  dp[e] = 0;
  while (!que.empty()) {
    int u = que.front();
    que.pop_front();
    if (vis[u]) continue;
    vis[u] = 1;
    if (u == s) return;
    for (auto v : g[u]) {
      in[v]--;
      if (in[v] == 0 && (dp[v] == -1 || dp[v] > dp[u])) {// 最后访问v点
        dp[v] = dp[u];
        que.push_front(v); // 优先更新下一个点
      }else if(dp[v] == -1) {// 第一次访问v点
        dp[v] = dp[u] + 1;
        que.push_back(v); // 最后更新下个点
      }
    }
  }
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  fill(in, in+maxn, 0);
  for (int i = 0; i < m; ++i) {
    int u, v;
    scanf("%d %d", &u, &v);
    g[v].push_back(u);
    in[u]++;
  }
  int s, e;
  scanf("%d %d", &s, &e);
  bfs(s, e);
  printf("%d\n", dp[s]);
  return 0;
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
根据你提供的批处理文件内容以及错误信息,问题出在合并测试报告时,原因是合并的输出包含不同的根测试套件。 在你的批处理文件中,你分别执行了三个测试套件,并将它们的输出分别保存为`output1.xml`、`output2.xml`和`output3.xml`。然后你使用`rebot`命令合并这些输出文件生成最终的测试报告。 然而,错误信息提示无法合并包含不同根测试套件的输出。具体来说,原始测试套件是'Goodlistsuite',而被合并的是'Singalgoodcombi'。 要解决这个问题,你需要确保合并的输出文件具有相同的根测试套件。可以通过以下方式进行修改: 1. 检查测试套件文件中的根测试套件名称,确保它们的名称相同。 2. 确保`Goodlistsuite.robot`、`Singalgoodcombi.robot`和`Goodgroupsuite.robot`文件中的根测试套件名称相同。 3. 在执行`robot`命令时,使用`--name`选项为每个测试套件指定一个相同的根测试套件名称。 例如: ```bat @echo off set ROBOT_REPORT_DIR=reports robot --outputdir %ROBOT_REPORT_DIR% --variablefile "variables.py" --name "MyRootSuite" --test test_* --output output1.xml "Goodmanage\Goodlistsuite.robot" robot --outputdir %ROBOT_REPORT_DIR% --variablefile "variables.py" --name "MyRootSuite" --test test_* --output output2.xml "Goodmanage\Singalgoodcombi.robot" robot --outputdir %ROBOT_REPORT_DIR% --variablefile "variables.py" --name "MyRootSuite" --test test_* --output output3.xml "Goodmanage\Goodgroupsuite.robot" rebot --outputdir %ROBOT_REPORT_DIR% --output final_report.html --merge %ROBOT_REPORT_DIR%\output1.xml %ROBOT_REPORT_DIR%\output2.xml %ROBOT_REPORT_DIR%\output3.xml ``` 请确保在执行`robot`命令时,将`--name`选项的值设置为相同的根测试套件名称。然后使用`rebot`命令合并输出文件生成最终的测试报告。这样应该可以解决合并输出文件时出现不同根测试套件的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值