RC-v3 智能护理中心统计
题意:
给出各管理节点的关系,和每个管理节点的照护老人数量。
两种操作:1. 转院. 2. 查询 该管理节点以下总的老人人数.
知识点:
树。
#include<bits/stdc++.h>using namespace std;const int maxn = 2e5 + 5;map<string,int> mp; int index = 1;int get(string s){// 将字符串对应为数字 if(mp[s]){return mp[s];}else{mp[s] = index++;return mp[s];}}int N,M;int peo[maxn]; // peo[i] 记入i 管理节点 老人的数量 vector<int> G[maxn];int fa[maxn];// 老人所在的管理节点 int dfs(int pos){int res = peo[pos];for(auto u : G[pos]){res += dfs(u);}return res;}int main(){cin>>N>>M;while(M--){string a,b;cin>>a>>b;int x = get(a);int y = get(b);if(a[0] >= '0' && a[0] <= '9'){peo[y]++;fa[x] = y;}else{G[y].push_back(x);}}char opt;while(cin>>opt){if(opt == 'E') break;string w,des;if(opt == 'Q'){cin>>w;int res = dfs(get(w));cout<<res<<"\n";}else if(opt == 'T'){cin>>w >> des;int id = get(w);int dd = get(des);peo[fa[id]]--; // 转出fa[id] = dd;peo[dd]++; // 转入}} }