赞
踩
给出各管理节点的关系,和每个管理节点的照护老人数量。
两种操作: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]++; // 转入 } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。