当前位置:   article > 正文

阿里测试_任何一项服务后边都有着无数子系统和组件的支撑, 子系统之间也互相依赖关联, 其中

任何一项服务后边都有着无数子系统和组件的支撑, 子系统之间也互相依赖关联, 其中

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

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

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

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

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>>保存连接的路径,依次递归寻找父节点的儿子节点

  1. #include <map>
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5. void find_Path(multimap<int, int> &Relev, vector<double> &timeUsed,
  6. vector<int>& path, vector<vector<int> > &paths, int key, int &time, int &maxTime) {
  7. multimap<int, int>::iterator iter;
  8. time += timeUsed[key];
  9. path.push_back(key);
  10. if ((iter = Relev.find(key)) != Relev.end())
  11. {
  12. int n = Relev.count(key);
  13. for (int j = 0; j < n; ++j, ++iter)
  14. {
  15. find_Path(Relev, timeUsed, path, paths, iter->second, time, maxTime);
  16. }
  17. }
  18. else
  19. {
  20. paths.push_back(path);
  21. if (maxTime < time)
  22. maxTime = time;
  23. }
  24. time -= timeUsed[key];
  25. path.pop_back();
  26. }
  27. int main()
  28. {
  29. int m, n;
  30. cin >> m >> n;
  31. vector<double> timeUsed(m + 1);
  32. bool* isHead = new bool[m + 1];
  33. memset(isHead, 1, m + 1);
  34. multimap<int, int> mp;
  35. int maxTime = 0;
  36. vector<vector<int> > paths;
  37. for (int i = 1; i <= m; ++i)
  38. {
  39. double time;
  40. cin >> time;
  41. timeUsed[i] = time;
  42. }
  43. for (int i = 0; i < n; ++i)
  44. {
  45. int Master, Slave;
  46. cin >> Master >> Slave;
  47. mp.insert(make_pair(Master, Slave));
  48. isHead[Slave] = false;
  49. }
  50. for (int i = 1; i <= m; ++i)
  51. {
  52. if (isHead[i])
  53. {
  54. int time = 0;
  55. vector<int>path;
  56. find_Path(mp, timeUsed, path, paths, i, time, maxTime);
  57. }
  58. }
  59. delete[] isHead;
  60. cout << paths.size() << " " << maxTime << endl;
  61. return 0;
  62. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/564551
推荐阅读
相关标签
  

闽ICP备14008679号