当前位置:   article > 正文

2022 RoboCom 世界机器人开发者大赛-高职组(国赛)RC-v3 智能护理中心统计_输入在第一行中给出 2 个正整数:n(≤10 4 )是老人的总数量,即老人们从 1 到 n 编

输入在第一行中给出 2 个正整数:n(≤10 4 )是老人的总数量,即老人们从 1 到 n 编

智能护理中心系统将辖下的护理点分属若干个大区,例如华东区、华北区等;每个大区又分若干个省来进行管理;省又分市,等等。我们将所有这些有管理或护理功能的单位称为“管理结点”。现在已知每位老人由唯一的一个管理结点负责,每个管理结点属于唯一的上级管理结点管辖。你需要实现一个功能,来统计任何一个管理结点所负责照看的老人的数量。

注意这是一个动态问题,即随时可能有老人加入某个管理结点,并且老人是有可能从一个管理结点换到另一个管理结点去的。

输入格式:

输入在第一行中给出 2 个正整数:N(≤104)是老人的总数量,即老人们从 1 到 N 编号;M(≤105)是归属关系的总数。

接下来是 M 行,每行给出一对归属关系,格式为:

A B

表示 A 归属于 BA 或 B 如果是某个管理结点,则用不超过 4 个大写英文字母表示其名称;如果是某位老人,则用老人的编号表示。这里每个 A 保证只有唯一的上级归属 B,且只有这个中心系统本身是没有上级归属的。此外,输入保证没有老人自己承担管理结点的角色,即 B 一定是一个管理结点,不可能是老人的编号。但一个管理结点既可以管辖下级结点,也可以直接护理一部分老人。

随后每行给出一个指令,格式为:

指令 内容

如果 指令 为 T,则表示有老人要入院或转院,内容 是某老人的编号和要去的管理结点的名称,以空格分隔;如果 指令 为 Q,则 内容 是一个管理结点的名称,意思是统计这个结点所负责照看的老人的数量;如果 指令 为 E,则表示输入结束。题目保证指令总数不会超过 100 个。

输出格式:

对每个 T 指令,将对应的老人转存到对应的管理结点名下;对每个 Q 指令,在一行中输出对应管理结点所负责照看的老人的数量。读到 E 指令就结束程序。

输入样例:

  1. 10 23
  2. EAST CNTR
  3. ZJ EAST
  4. SD EAST
  5. WEST CNTR
  6. SX WEST
  7. HZ ZJ
  8. JN SD
  9. 2 JN
  10. 8 JTH
  11. 6 XAHP
  12. 4 ZDYH
  13. 5 ZDYH
  14. ZDYH HZ
  15. HUZ ZJ
  16. JX ZJ
  17. 1 JX
  18. 3 JN
  19. WZ ZJ
  20. XAHP XIAN
  21. XIAN SX
  22. YL SX
  23. JTH XIAN
  24. 7 XAHP
  25. Q EAST
  26. T 1 YL
  27. Q EAST
  28. Q SX
  29. T 8 ZDYH
  30. Q HZ
  31. Q HUZ
  32. T 10 XAHP
  33. Q CNTR
  34. E

输出样例:

  1. 5
  2. 4
  3. 4
  4. 3
  5. 0
  6. 9

 

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int n,m;
  5. cin>>n>>m;
  6. ios::sync_with_stdio(false);
  7. cin.tie(0);cout.tie(0);
  8. unordered_map<string,map<string,int>>super;
  9. unordered_map<string,map<string,int>>user;
  10. unordered_map<string,string>link;
  11. unordered_map<string,int>nums;
  12. for(int i=0;i<m;i++){
  13. string A,B;
  14. cin>>A>>B;
  15. if(A[0] >='A' && A[0]<='Z'){
  16. //super link super
  17. super[B][A]=1;
  18. }else{
  19. //user link super
  20. user[B][A]=1;
  21. link[A] = B;
  22. nums[B]++;
  23. }
  24. }
  25. char ch;
  26. while(cin>>ch){
  27. if(ch=='E')break;
  28. if(ch=='T'){
  29. string id;
  30. string to;
  31. cin>>id>>to;
  32. if(link[id].length() > 0){
  33. user[link[id]][id]=0;
  34. nums[link[id]]--;
  35. user[to][id]=1;
  36. link[id]=to;
  37. nums[to]++;
  38. }else{
  39. user[to][id]=1;
  40. link[id]=to;
  41. nums[to]++;
  42. }
  43. }else if(ch=='Q'){
  44. queue<string>q;
  45. string tmp;
  46. cin>>tmp;
  47. q.push(tmp);
  48. int ans =0;
  49. while(!q.empty()){
  50. string now = q.front();
  51. q.pop();
  52. ans += nums[now];
  53. for(auto it:super[now]){
  54. if(it.second==1){
  55. q.push(it.first);
  56. }
  57. }
  58. }
  59. cout<<ans<<"\n";
  60. }
  61. }
  62. return 0;
  63. }

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

闽ICP备14008679号