阿里测试

2023-11-03

今天我们看到的阿里巴巴提供的任何一项服务后边都有着无数子系统和组件的支撑,子系统之间也互相依赖关联,

其中任意一个环节出现问题都可能对上游链路产生影响。小明做为新人接收到的第一个任务就是去梳理所有的依赖关系,

小明和每个系统的负责人确认了依赖关系,记录下调用对应系统的耗时,用这些数据分析端到端链路的数目和链路上最长的耗时。

输入: 小明搜集到的系统耗时和依赖列表

5  4   // 表示有5个系统和 4个依赖关系

3      // 调用1号系统耗时 3 ms

2      // 调用2号系统耗时 2 ms

10     // 调用3号系统耗时 10 ms

5      // 调用4号系统耗时 5 ms

7      //  调用5号系统耗时 7 ms

1 2    //  2号系统依赖1号系统

1 3    //  3号系统依赖1号系统

2 5    //  2号系统依赖5号系统

4 5    //  4号系统依赖5号系统

输出:  调用链路的数目 和最大的耗时, 这里有三条链路1->2->5,1->3, 4->5,最大的耗时是1到3的链路 3+10 = 13,无需考虑环形依赖的存在。

3  13

解题:有map来保存连接的关系,有vector<vector<int>>保存连接的路径,依次递归寻找父节点的儿子节点

#include <map>
#include <iostream>
#include <vector>

using namespace std;

void find_Path(multimap<int, int> &Relev, vector<double> &timeUsed,
	vector<int>& path, vector<vector<int> > &paths, int key, int &time, int &maxTime) {

	multimap<int, int>::iterator iter;
	time += timeUsed[key];
	path.push_back(key);

	if ((iter = Relev.find(key)) != Relev.end())
	{
		int n = Relev.count(key);
		for (int j = 0; j < n; ++j, ++iter) 
		{
			find_Path(Relev, timeUsed, path, paths, iter->second, time, maxTime);
		}
	}
	else 
	{
		paths.push_back(path);
		if (maxTime < time)
			maxTime = time;
	}

	time -= timeUsed[key];
	path.pop_back();
}
int main()
{
	int m, n;
	cin >> m >> n;
	vector<double> timeUsed(m + 1);
	bool* isHead = new bool[m + 1];
    memset(isHead, 1, m + 1);
	multimap<int, int> mp;
	int maxTime = 0;
	vector<vector<int> > paths;
	for (int i = 1; i <= m; ++i)
	{
		double time;
		cin >> time;
		timeUsed[i] = time;
	}
	for (int i = 0; i < n; ++i) 
	{
		int Master, Slave;
		cin >> Master >> Slave;
		mp.insert(make_pair(Master, Slave));
		isHead[Slave] = false;
	}

	for (int i = 1; i <= m; ++i) 
	{
		if (isHead[i]) 
		{
			int time = 0;
			vector<int>path;
			find_Path(mp, timeUsed, path, paths, i, time, maxTime);
		}
	}

	delete[] isHead;
	cout << paths.size() << " " << maxTime << endl;
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阿里测试 的相关文章

  • java字符串

    java字符串 java字符串 一 String类 一 特点 二 构造方法 String str abc 与 String str2 new String abc 的区别 三 常用方法 intern String类拼接 字符串转数字 字符串
  • linux qt目录查看,QT遍历目录获取文件信息

    QFileInfo获取文件信息 文件名称 路径 大小 创建时间 修改时间 权限等使用路径 UNIX home dipper file1Windows C dipper file1 构造函数 QFileInfo fileInfo path Q

随机推荐

  • 【翻译 + 整理】Qt样式表详解(10):伪状态

    1 active 部件处于活动的状态 2 adjoins item 当QTreeView的 branch与某个item相邻时 将设置此状态 QTreeView branch background red QTreeView branch a
  • 蓝桥杯流转呼吸灯

    include STC15F2K60S2 h include
  • Python直接使用plot()函数画图

    目录 一 plot 函数的认识 二 plot 函数基本运用 三 plot 函数数据可视化画图以及图元基本参数设置 一 plot 函数的认识 在使用Python进行数据可视化编程中matplotlib库是我们用来对数据进行画图常用的第三方库
  • 时间戳转换成字符串,返回Invalid Date(自己遇到的坑)

    今天在开发的过程中 遇到一个比较坑自己的问题 将时间戳转换成正常日期的时候 总是会返回Invalid Date 排查了好久 在想为什么是这个结果 在控制台里面测试都是ok的呀 于是乎 想到了自己再后端定义的时候 时间戳定义的是字符串格式的数
  • Python 使用 Thrift 连接 HBASE 进行操作

    在工作中想要使用Python对HBASE进行操作 主要用来获取数据进行分析 HBASE提供了 Thrift 借口 通过查看API 进行了一些的尝试 下面就是使用Python的相关代码 在使用之前需要启动 HBASE的Thrift和安装pyt
  • 分布式系统设计的求生之路

    作者 作者 Simon 腾讯后台开发高级工程师 链接 http wetest qq com lab view id 105 著作权归作者所有 商业转载请联系WeTest获得授权 非商业转载请注明出处 分布式系统理念渐渐成为了后台架构技术的重
  • 嵌入式入门教学——C51(中)

    嵌入式入门教学汇总 嵌入式入门教学 C51 上 嵌入式入门教学 C51 中 嵌入式入门教学 C51 下 文章中所使用到的所有代码模块 免费 基于STC89C52RC的代码模块资源 CSDN文库 目录 七 矩阵键盘 八 定时器和中断 九 串口
  • win10常用操作集合 - vhd/wsl/等等

    文章目录 wsl常用操作 cli操作 vhd常用操作 UI操作 扩容 缩容 方法一 常规方法 方法二 碎片整理 常见问题1 win10 UI 基本配置 win10网络配置 防火墙配置 wsl常用操作 cli操作 前提 BIOS要使能虚拟化相
  • MATLAB搜索路径的查看和设置方法

    MATLAB搜索路径的查看和设置方法 1 查看matlab的搜索路径 单击matlab主界面菜单工具栏中的 设置路径 按钮 打开 设置路径 对话框 左侧的几个按钮用来添加目录到搜索路径 还可以从当前的搜索路径中移除选择的目录 右侧的列表框列
  • 静态代码检查-Sonar-环境安装(一)

    1 前提 1 安装mysql数据库 5 6以上版本 本人数据库版本5 7 2 安装jdk1 8 本人jdk版本1 8 2 官网下载 https www sonarqube org downloads 最新版本6 7稳定版 选择 Show a
  • 密码学 / 哈希算法

    一 诞生原因 在日常生活中 每个人去银行 坐火车都需要身份证证明自己的身份 身份证存在的目的就是要证明我真的是我 同样在网络中 一个文件是否被改过 更改之后就是新的文件 需要一个 身份证 证明 这里就需要了 hash 算法了 二 特点 为了
  • 黑马并发笔记

    参考这个就好 https www yuque com gaohanghang sgrbwh wng754 这个也不错 https blog csdn net weixin 50280576 article details 113033975
  • 开放加速规范AI服务器设计指南

    近日 在2023年开放计算社区中国峰会 OCP China Day 2023 上 开放加速规范AI服务器设计指南 以下简称 指南 发布 指南 面向生成式AI应用场景 进一步发展和完善了开放加速规范AI服务器的设计理论和设计方法 将助力社区成
  • Linux内存管理:ARM Memory Layout以及mmu配置

    http blog csdn net hongzg1982 article details 47341881 在内核进行page初始化以及mmu配置之前 首先需要知道整个memory map 1 ARM Memory Layout PAGE
  • Adobe Photoshop 2022版 功能介绍及使用技巧

    目录 版本介绍 使用技巧 截图展示 分享 版本介绍 Adobe Photoshop 2022是Adobe公司的一款专业的图像处理软件 它提供了强大的图像处理功能 从色彩调整 图层处理到高级合成等功能 新版本带来的一些更新包括 1 人工智能辅
  • Angular的自动化测试

    当Angular项目的规模到达一定的程度 就需要进行测试工作了 本文着重介绍关于ng的测试部分 主要包括以下三个方面 框架的选择 Karma Jasmine 测试的分类和选择 单元测试 端到端测试 在ng中各个模块如何编写测试用例 下面各部
  • Unity的C#编程教程_36_while循环语句

    do while 循环 首先执行用于循环的程序块 再进行条件判断 判断为真则再次运行程序块 直到判定为假 跳出循环 比如数数程序 using System Collections using System Collections Gener
  • Shell文本处理三剑客之awk

    本章大纲 8 3 awk awk是一个处理文本的编程语言工具 能用简短的程序处理标准输入或文件 数据排序 计算以及生成报表等等 在Linux系统下默认awk是gawk 它是awk的GNU版本 可以通过命令查看应用的版本 ls l bin a
  • 开放封闭原则(Open Closed Principle)

    在面向对象的设计中有很多流行的思想 比如说 所有的成员变量都应该设置为私有 Private 要避免使用全局变量 Global Variables 使用运行时类型识别 RTTI Run Time Type Identification 例如
  • 阿里测试

    今天我们看到的阿里巴巴提供的任何一项服务后边都有着无数子系统和组件的支撑 子系统之间也互相依赖关联 其中任意一个环节出现问题都可能对上游链路产生影响 小明做为新人接收到的第一个任务就是去梳理所有的依赖关系 小明和每个系统的负责人确认了依赖关