标签:des style blog http io color ar os java
Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3494 Accepted Submission(s):
973
1 #pragma comment(linker,"/STACK:100000000,100000000") 2 #include<iostream> 3 #include<stdio.h> 4 #include<cstring> 5 #include<cstdlib> 6 using namespace std; 7 typedef __int64 LL; 8 const int maxn = 5e4+3; 9 10 int pos,cont; 11 int a[maxn]; 12 int son[maxn]; 13 int head[maxn]; 14 int vis[maxn]; 15 int w[maxn]; 16 int dep[maxn]; 17 int father[maxn]; 18 int hxl[maxn]; 19 int top[maxn]; 20 struct Edge 21 { 22 int to; 23 int next; 24 }edge[maxn*2]; 25 26 void init() 27 { 28 pos = cont = 0; 29 memset(son,-1,sizeof(son)); 30 memset(head,-1,sizeof(head)); 31 memset(hxl,0,sizeof(hxl)); 32 } 33 void addedge(int u,int v) 34 { 35 edge[cont].to = v; 36 edge[cont].next = head[u]; 37 head[u] = cont; 38 ++cont; 39 } 40 void dfs1(int u,int fre,int deep) 41 { 42 father[u] = fre; 43 dep[u] = deep; 44 vis[u] = 1; 45 for(int i=head[u];i!=-1;i=edge[i].next) 46 { 47 int v = edge[i].to; 48 if(v!=fre) 49 { 50 dfs1(v,u,deep+1); 51 vis[u]=vis[u]+vis[v]; 52 if(son[u] == -1 || vis[v] > vis[son[u]]) 53 son[u] = v; 54 } 55 } 56 } 57 void dfs2(int u,int t) 58 { 59 top[u] = t; 60 if(son[u]!=-1) 61 { 62 w[u]=++pos; 63 dfs2(son[u],t); 64 } 65 else 66 { 67 w[u]=++pos; 68 return; 69 } 70 for(int i=head[u];i!=-1;i=edge[i].next) 71 { 72 int v = edge[i].to; 73 if(v!=son[u] && v!=father[u]) 74 dfs2(v,v); 75 } 76 } 77 void add(int x,int n,int num1) 78 { 79 for(int i=x;i<=n;i=i+(i&(-i))) 80 hxl[i] = hxl[i] + num1; 81 } 82 LL query(int x) 83 { 84 if(x==0)return 0; 85 LL sum1 = 0; 86 while(x) 87 { 88 sum1=sum1+hxl[x]; 89 x=x-(x&(-x)); 90 } 91 return sum1; 92 } 93 void insert(int u,int v,int num1,int size1) 94 { 95 int topu=top[u],topv=top[v]; 96 while(topu!=topv) 97 { 98 if(dep[topu]<dep[topv]) 99 { 100 swap(u,v); 101 swap(topu,topv); 102 } 103 add(w[topu],pos,num1*size1); 104 add(w[u]+1,pos,-1*num1*size1); 105 u=father[topu]; 106 topu = top[u]; 107 } 108 if(dep[u]>dep[v]) swap(u,v); 109 add(w[u],pos,num1*size1); 110 add(w[v]+1,pos,-1*num1*size1); 111 } 112 int main() 113 { 114 int n,m,q,u,v,l,r; 115 while(scanf("%d%d%d",&n,&m,&q)>0) 116 { 117 init(); 118 for(int i=1;i<=n;i++) 119 scanf("%d",&a[i]); 120 for(int i=1;i<=m;i++) 121 { 122 scanf("%d%d",&u,&v); 123 addedge(u,v); 124 addedge(v,u); 125 } 126 addedge(0,1); 127 addedge(1,0); 128 dfs1(1,0,0); 129 dfs2(1,1); 130 char str1[6]; 131 while(q--) 132 { 133 scanf("%s",str1); 134 if(str1[0]==‘I‘) 135 { 136 scanf("%d%d%d",&l,&r,&v); 137 insert(l,r,v,1); 138 } 139 else if(str1[0]==‘D‘) 140 { 141 scanf("%d%d%d",&l,&r,&v); 142 insert(l,r,v,-1); 143 } 144 else if(str1[0]==‘Q‘) 145 { 146 scanf("%d",&r); 147 printf("%I64d\n",query(w[r])+a[r]); 148 } 149 } 150 } 151 return 0; 152 }
hdu 3966 Aragorn's Story 树链剖分 按点
标签:des style blog http io color ar os java
原文地址:http://www.cnblogs.com/tom987690183/p/4072790.html