bzoj 1036 树的统计Count

题意:...

解法:树链剖分,对点进行重编号,这样的话线段树中点的信息就是树中点的信息。。。别的很常规。。。

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 #define N 30010
  5 #define lson l,m,n<<1
  6 #define rson m+1,r,n<<1|1
  7 using namespace std;
  8 const int inf=1<<30;
  9 struct Edge{
 10     int u,v,next;
 11     Edge(){}
 12     Edge(int _u,int _v,int _next){
 13         u=_u;v=_v;next=_next;
 14     }
 15 }edge[N<<1];
 16 int head[N],cnt;
 17 int sz[N],top[N],fa[N],dep[N],hash[N],w[N],son[N],num;
 18 void init(){
 19     memset(head,-1,sizeof(head));
 20     cnt=num=0;
 21 }
 22 void add(int u,int v){
 23     edge[cnt]=Edge(u,v,head[u]);head[u]=cnt++;
 24     edge[cnt]=Edge(v,u,head[v]);head[v]=cnt++;
 25 }
 26 void dfs(int u,int d){
 27     sz[u]=1;son[u]=0;dep[u]=d;
 28     for(int k=head[u];k!=-1;k=edge[k].next){
 29         int v=edge[k].v;
 30         if(v==fa[u])continue;
 31         fa[v]=u;
 32         dfs(v,d+1);
 33         sz[u]+=sz[v];
 34         if(sz[v]>sz[son[u]])son[u]=v;
 35     }
 36 }
 37 void build_tree(int u,int pre){
 38     hash[u]=++num;top[u]=pre;
 39     if(son[u])build_tree(son[u],pre);
 40     for(int k=head[u];k!=-1;k=edge[k].next){
 41         int v=edge[k].v;
 42         if(v!=fa[u]&&v!=son[u])build_tree(v,v);
 43     }
 44 }
 45 struct segtree{
 46     int maxn[N<<2],sum[N<<2];
 47     void pushup(int n){
 48         sum[n]=sum[n<<1]+sum[n<<1|1];
 49         maxn[n]=max(maxn[n<<1],maxn[n<<1|1]);
 50     }
 51     void update(int nn,int x,int l,int r,int n){
 52         if(l==r){
 53             maxn[n]=sum[n]=x;
 54             return;
 55         }
 56         int m=(l+r)>>1;
 57         if(nn<=m)update(nn,x,lson);
 58         else update(nn,x,rson);
 59         pushup(n);
 60     }
 61     int query_max(int ll,int rr,int l,int r,int n){
 62         if(ll==l&&rr==r)return maxn[n];
 63         int m=(l+r)>>1;
 64         if(rr<=m)return query_max(ll,rr,lson);
 65         else if(ll>m)return query_max(ll,rr,rson);
 66         else return max(query_max(ll,m,lson),query_max(m+1,rr,rson));
 67     }
 68     int query_sum(int ll,int rr,int l,int r,int n){
 69         if(ll==l&&rr==r)return sum[n];
 70         int m=(l+r)>>1;
 71         if(rr<=m)return query_sum(ll,rr,lson);
 72         else if(ll>m)return query_sum(ll,rr,rson);
 73         else return query_sum(ll,m,lson)+query_sum(m+1,rr,rson);
 74     }
 75 }seg;
 76 int Query_max(int a,int b,int n){
 77     int ta=top[a],tb=top[b],ans=-inf;
 78     while(ta!=tb){
 79         if(dep[ta]<dep[tb]){
 80             swap(ta,tb);swap(a,b);
 81         }
 82         ans=max(ans,seg.query_max(hash[ta],hash[a],1,n,1));
 83         a=fa[ta];ta=top[a];
 84     }
 85     if(dep[a]>dep[b])swap(a,b);
 86     return max(ans,seg.query_max(hash[a],hash[b],1,n,1));
 87 }
 88 int Query_sum(int a,int b,int n){
 89     int ta=top[a],tb=top[b],ans=0;
 90     while(ta!=tb){
 91         if(dep[ta]<dep[tb]){
 92             swap(ta,tb);swap(a,b);
 93         }
 94         ans+=seg.query_sum(hash[ta],hash[a],1,n,1);
 95         a=fa[ta];ta=top[a];
 96     }
 97     if(dep[a]>dep[b])swap(a,b);
 98     return ans+seg.query_sum(hash[a],hash[b],1,n,1);
 99 }
100 int main(){
101     int n,a,b,q;
102     char op[10];
103     while(~scanf("%d",&n)){
104         init();
105         for(int i=1;i<n;i++){
106             scanf("%d%d",&a,&b);
107             add(a,b);
108         }
109         for(int i=1;i<=n;i++)scanf("%d",&w[i]);
110         dfs(1,1);
111         build_tree(1,1);
112         for(int i=1;i<=n;i++)seg.update(hash[i],w[i],1,n,1);
113         scanf("%d",&q);
114         while(q--){
115             scanf("%s%d%d",op,&a,&b);
116             if(strcmp(op,"QMAX")==0){
117                 int ans=Query_max(a,b,n);
118                 printf("%d\n",ans);
119             }else if(strcmp(op,"QSUM")==0){
120                 int ans=Query_sum(a,b,n);
121                 printf("%d\n",ans);
122             }else {
123                 seg.update(hash[a],b,1,n,1);
124             }
125         }
126     }
127     return 0;
128 }

 

 

转载于:https://www.cnblogs.com/silver-bullet/archive/2013/02/09/2909473.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1500. Design a File Sharing System(哈希map+优先队列)

文章目录1. 题目2. 解题1. 题目 We will use a file-sharing system to share a very large file which consists of m small chunks with IDs from 1 to m. When users join the system, the system should assign a unique ID to them. The unique ID should be used once …

mupdf java_mupdf库学习

http://macleo.iteye.com/blog/1544948Java代码freetye-config --cflags2.C语言的用处其实还是很大的....C也一样&#xff0c;不经意处C语言还在发挥着巨大的作用3.踏破铁鞋无觅处啊http://zhiweiofli.iteye.com/blog/9050694.Bitmap旋转http://blog.sina.com.cn/s/blog_625def…

Centos或者Redhet开通telnet

我参考了两篇文章&#xff1a; 1、51cto的这篇最全&#xff1a; http://blog.chinaunix.net/uid-21134884-id-3015272.html 2、本园子里面的&#xff1a; http://www.cnblogs.com/xlmeng1988/archive/2012/04/24/telnet-server.html转载于:https://www.cnblogs.com/diyunpeng/a…

LeetCode 425. 单词方块(Trie树+DFS)

文章目录1. 题目2. 解题1. 题目 给定一个单词集合 &#xff08;没有重复&#xff09;&#xff0c;找出其中所有的 单词方块 。 一个单词序列形成了一个有效的单词方块的意思是指从第 k 行和第 k 列 (0 ≤ k < max(行数, 列数)) 来看都是相同的字符串。 例如&#xff0c;单…

python numpy pandas 书 全_用Python做数据分析,Numpy,Pandas,matp

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼用Python做数据分析&#xff0c;Numpy&#xff0c;Pandas&#xff0c;matplotlib是怎么也绕不开的三个包&#xff0c;我最开始学习pandas是看的《利用Python进行数据分析》&#xff0c;看了好几遍&#xff0c;不是从头到尾看了好几…

打开约束指令,让编码更规范

如果你使用perl5.12 或更高的版本&#xff0c;可以显示的指定当前Perl版本号来自动打开约束指令。 use 5.012; #自动启用use strict 指令 之前的版本通过添加下边这句话 use strict; 通过启用约束指令&#xff0c;编程时常见的错误很容易暴露出来。 而启用warnings指令的话&…

LeetCode 642. 设计搜索自动补全系统(Trie树)

文章目录1. 题目2. 解题1. 题目 为搜索引擎设计一个搜索自动补全系统。 用户会输入一条语句&#xff08;最少包含一个字母&#xff0c;以特殊字符 ‘#’ 结尾&#xff09;。 除 ‘#’ 以外用户输入的每个字符&#xff0c;返回历史中热度前三并以当前输入部分为前缀的句子。下面…

python 动漫卡通人物图片大全_用Python把人物头像动漫化,不同的表情给你不同的惊喜...

前言最近上网冲浪的时候看到了一个有趣的东西&#xff0c;叫做『人物动漫化』&#xff0c;作为老大的粉丝&#xff0c;怎么可能放过这个机会&#xff0c;让我们先看看效果图&#xff1a;这就是这次要用Python搞的事情啦&#xff0c;我们会利用百度AI的人物动漫化技术&#xff0…

linux 命令学习记录

文件操作 chown -R user file 修改文件所有者chmod -R 777 file 修改文件权限wrxmkdir -p dir1/dir2/dir3 创建目录rmdir -p dir1/dir2/dir3 删除目录&#xff08;目录为空&#xff09;cp source target 复制source到targetcp -s source target 创建target 软链接到source &…

“后见之明”是冰冷刻薄的讥讽;这是一种病,得治。

我最讨厌的一类人就是&#xff0c;“嗯&#xff0c;我早就说过吧”、“你看&#xff0c;我没说错吧”。这不是高明&#xff0c;而是无耻无德无道无义。你早知 道为什么不说&#xff1f;你早发现为什么不阻止&#xff1f;你早有能耐为什么到现在才和我扯淡&#xff1f;“后见之明…

LeetCode MySQL 1264. 页面推荐(union)

文章目录1. 题目2. 解题1. 题目 朋友关系列表&#xff1a; Friendship ------------------------ | Column Name | Type | ------------------------ | user1_id | int | | user2_id | int | ------------------------ 这张表的主键是 (user1_id, use…

java从1开始计时用线程_java – Python – 线程,计时或函数使用?

我正在制定一个关于如何解决这个问题的想法.请帮忙.我的项目包含一个N x N网格,其中包含一系列块,这些块应该在随机方向和随机速度内移动(每隔0.1秒,块的位置用速度更新).我有三个“特殊”块,预计会有各自的移动功能.我将有其他块(其中许多)除了更新它们的位置之外什么都不做,并…

LeetCode MySQL 1070. 产品销售分析 III(group by 陷阱)

文章目录1. 题目2. 解题1. 题目 销售表 Sales&#xff1a; -------------------- | Column Name | Type | -------------------- | sale_id | int | | product_id | int | | year | int | | quantity | int | | price | int | -------------…

java中excel文件导入数据库中_〖JAVE经验〗java中Excel导入数据库里

1 从Excel文件读取数据表 Java Excel API既可以从本地文件系统的一个文件(.xls)&#xff0c;也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术语&#xff1a;工作薄)&#xff0c;下面的代码片段举例说明了应该如何操作&#xff1a;(完整代码见Excel…

怎样在方框里打钩?

打开Microsoft Office Word 2003文档&#xff0c;鼠标单击菜单栏“插入”下拉菜单中的“符号”&#xff0c;选择“符号”对话框中的“符号”标签&#xff0c;在“字体”中选择“Wingdings 2”&#xff0c;即可在众多符号中找到“方框里面打钩的符号”。转载于:https://www.cnbl…

LeetCode MySQL 1364. 顾客的可信联系人数量

文章目录1. 题目2. 解题1. 题目 顾客表&#xff1a;Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | customer_name | varchar | | email | varchar | ------------------------ customer_…

JS控制锚点打开新窗口

在XHTML中不能含有TARGET&#xff0c;那么要使链接打开新窗口的话&#xff0c; 如果针对页面上所有锚点&#xff0c;JAVASCRIPT如下即可&#xff1a; function externalLinks() {if (!document.getElementsByTagName) return;var anchors document.getElementsByTagName("…

java showinputdialog_java - JOptionPane.showInputDialog中的多个输入

有没有一种方法可以在JOptionPane.showInputDialog中创建多个输入&#xff0c;而不是只创建一个输入&#xff1f;最佳答案&#xff1a;对。您知道可以将任何Object放入大多数Object的JOptionPane.showXXX methods参数中&#xff0c;并且经常会发现Object恰好是一个JPanel参数。…

LeetCode MySQL 602. 好友申请 II :谁有最多的好友(union all)

文章目录1. 题目2. 解题1. 题目 在 Facebook 或者 Twitter 这样的社交应用中&#xff0c;人们经常会发好友申请也会收到其他人的好友申请。 表 request_accepted 存储了所有好友申请通过的数据记录&#xff0c;其中&#xff0c; requester_id 和 accepter_id 都是用户的编号。…

用async 解放你的大脑

在js中&#xff0c;代码嵌套和代码回调非常常见&#xff0c;不仅编写麻烦而且异常反人类。让我等码农很是头痛 function () {function () {function () {function () {//pass}}} }这是一个常规的嵌套&#xff0c;如果每个function 的逻辑处理都比较多的话&#xff0c;会导致整个…