本文共 3941 字,大约阅读时间需要 13 分钟。
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1354 Accepted Submission(s): 496
5 31 2 1 3 21 22 43 12 54 5 1 31 1 1 13 5 2 3
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 #define LL long long 7 vector G[100005]; 8 typedef struct 9 { 10 LL id; 11 LL x, y; 12 LL l, r; 13 }Quer; 14 Quer s[100005], cnt[100005]; 15 LL tre[445005]; 16 LL n, val[100005], son[100005], fa[100005], siz[100005], dep[100005]; 17 LL k, top[100005], rak[100005], id[100005], anl[100005], anr[100005]; 18 bool comp1(Quer a, Quer b) 19 { 20 if(a.l siz[son[u]]) 43 son[u] = v; 44 } 45 } 46 void Sechr(LL u, LL p) 47 { 48 LL v, i; 49 top[u] = p; 50 rak[u] = ++k, id[k] = u; 51 if(son[u]==0) 52 return; 53 Sechr(son[u], p); 54 for(i=0;i =a && r<=b) 82 return tre[x]; 83 m = (l+r)/2; 84 if(a<=m) 85 sum += Query(l, m, x*2, a, b); 86 if(b>=m+1) 87 sum += Query(m+1, r, x*2+1, a, b); 88 return sum; 89 } 90 LL TreQuery(LL x, LL y) 91 { 92 LL sum, p1, p2; 93 p1 = top[x], p2 = top[y], sum = 0; 94 while(p1!=p2) 95 { 96 if(dep[p1] dep[y])102 swap(x, y);103 sum += Query(1, n, 1, rak[x], rak[y]);104 return sum;105 }106 107 int main(void)108 {109 LL i, j, x, y, q;110 while(scanf("%lld%lld", &n, &q)!=EOF)111 {112 for(i=1;i<=n;i++)113 G[i].clear();114 for(i=1;i<=n;i++)115 {116 scanf("%lld", &val[i]);117 cnt[i].id = i;118 cnt[i].r = val[i];119 }120 sort(cnt+1, cnt+n+1, compr);121 for(i=1;i<=n-1;i++)122 {123 scanf("%lld%lld", &x, &y);124 G[x].push_back(y);125 G[y].push_back(x);126 }127 memset(siz, 0, sizeof(siz));128 memset(son, 0, sizeof(son));129 k = 0;130 Sechs(1, 0);131 Sechr(1, 1);132 for(i=1;i<=q;i++)133 {134 scanf("%lld%lld%lld%lld", &s[i].x, &s[i].y, &s[i].l, &s[i].r);135 s[i].id = i;136 }137 138 sort(s+1, s+q+1, comp1);139 memset(tre, 0, sizeof(tre));140 j = 1;141 for(i=1;i<=q;i++)142 {143 while(cnt[j].r
转载地址:http://wkhpl.baihongyu.com/