[关闭]
@994495jj 2017-07-25T00:58:22.000000Z 字数 1442 阅读 764

cfgym100513C

(ACM)数据结构----树链剖分 201707


  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define fi first
  4. #define se second
  5. #define pb push_back
  6. #define sz(a) (int)a.size()
  7. #define mp make_pair
  8. #define rep(i, a, b) for(int i=(a); i<(b); i++)
  9. typedef long long ll;
  10. typedef pair<int, int> pii;
  11. typedef vector<int> vi;
  12. //--------
  13. const int N=300005;
  14. int n;
  15. int fa[N],siz[N],son[N],top[N],tid[N];
  16. vector<string> vv[N];
  17. vector<int> G[N];
  18. map<string,set<pair<int,string> > > mess[N];
  19. set<pair<int,string> >::iterator it;
  20. void dfs1(int u) {
  21. siz[u]=1;
  22. rep(i,0,sz(G[u])) {
  23. int v=G[u][i];
  24. dfs1(v);
  25. siz[u]+=siz[v];
  26. if(son[u]==-1||siz[v]>siz[son[u]]) son[u]=v;
  27. }
  28. }
  29. void dfs2(int u,int tp,int d) {
  30. top[u]=tp;
  31. tid[u]=d;
  32. if(son[u]==-1) return ;
  33. dfs2(son[u],tp,d+1);
  34. rep(i,0,sz(G[u])) {
  35. int v=G[u][i];
  36. if(v!=son[u]) dfs2(v,v,1);
  37. }
  38. }
  39. int main() {
  40. ios::sync_with_stdio(false);
  41. ///
  42. cin>>n;
  43. ///init
  44. memset(son,-1,sizeof(son));
  45. ///read
  46. rep(i,1,n+1) {
  47. int m;cin>>fa[i]>>m;
  48. G[fa[i]].pb(i);
  49. rep(j,0,m) {
  50. string s;cin>>s;
  51. vv[i].pb(s);
  52. }
  53. }
  54. ///
  55. dfs1(1);
  56. dfs2(1,1,1);
  57. ///solve
  58. rep(i,1,n+1) {
  59. rep(j,0,sz(vv[i])) {
  60. string b=vv[i][j].substr(vv[i][j].find('=')+1);
  61. vv[i][j].erase(vv[i][j].find('='));
  62. string a=vv[i][j];
  63. mess[top[i]][a].insert(mp(tid[i],b));
  64. }
  65. }
  66. int q;cin>>q;
  67. while(q--) {
  68. int u;string s;
  69. cin>>u>>s;
  70. int f=1;
  71. while(u>0) {
  72. it = mess[top[u]][s].upper_bound(mp(tid[u],string("zzzzzzzzzzzzzzz")));
  73. if(it==mess[top[u]][s].begin()) u=fa[top[u]];
  74. else {
  75. --it;
  76. f=0;
  77. cout<<it->se<<endl;
  78. break;
  79. }
  80. }
  81. if(f) cout<<"N/A"<<endl;
  82. fflush(stdout);
  83. }
  84. return 0;
  85. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注