LOJ2195 旅行

LOJ2195 旅行

题目描述
S 国有 N 个城市,编号从 1 到 N。城市间用 N-1 条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。为了方便,我们用不同的正整数代表各种宗教,S 国境内总共有 c 种不同的宗教。

S 国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S 国政府为每个城市标定了不同的旅行评级,旅行者们常会记下途中(包括起点和终点)留宿过的城市的评级总和或最大值。

在 S 国的历史上常会发生以下几种事件:

CC x c:城市 x 的居民全体改信了 c 教;
CW x w:城市 x 的评级调整为 w;
QS x y:一位旅行者从城市 x 出发,到城市 y,并记下了途中留宿过的城市的评级总和;
QM x y:一位旅行者从城市 x 出发,到城市 y,并记下了途中留宿过的城市的评级最大值。
由于年代久远,旅行者记下的数字已经遗失了,但记录开始之前每座城市的信仰与评级,还有事件记录本身是完好的。请根据这些信息,还原旅行者记下的数字。
为了方便,我们认为事件之间的间隔足够长,以致在任意一次旅行中,所有城市的评级和信仰保持不变。

输入格式
输入的第一行包含整数 N,Q 依次表示城市数和事件数。
接下来 N 行,第 i+1 行两个整数 Wi​,Ci​ 依次表示记录开始之前,城市 i 的评级和信仰。
接下来 N-1 行每行两个整数 x,y 表示一条双向道路。
接下来 Q 行,每行一个操作,格式如上所述。

输出格式
对每个 QS 和 QM 事件,输出一行,表示旅行者记下的数字。

样例
样例输入
5 6
3 1
2 3
1 2
3 3
5 1
1 2
1 3
3 4
3 5
QS 1 5
CC 3 1
QS 1 5
CW 3 3
QS 1 5
QM 2 4
样例输出
8
9
1
3
数据范围与提示
对所有的数据,N,Q≤10^5, C≤10^5,对所有 QS 和 QM 事件,起点和终点城市的信仰相同;在任意时刻,城市的评级总是不大于 10^4 的正整数,且宗教值不大于 c。

_________________________________________________________________________________________

树链剖分,单点修改,求和。

但是由于只对对应的点(信奉相同的宗教)的点求和,而宗教的种类太多,每个线段树的点不能为10^5个点,所以要动态开点。

第一次写动态开点线段树,但过去用指针写过线段树,所以感觉不算难。

所谓动态开点,就是用不到的点先不要建点,只把对应的点建立,这样每次建一个点只需要建一条链(长logn)就可以了,不用的点先不用建。

其他的和普通线段树一样。

_________________________________________________________________________________________

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 typedef int ll;
  4 const ll maxn=1e5+10;
  5 ll n,m;
  6 struct edge
  7 {
  8     int u,v,nxt;
  9 }e[maxn<<1];
 10 ll head[maxn],js;
 11 void addage(ll u,ll v)
 12 {
 13     e[++js].u=u;e[js].v=v;
 14     e[js].nxt=head[u];head[u]=js;
 15 }
 16 ll w[maxn],c[maxn];
 17 ll dep[maxn],fat[maxn],siz[maxn],son[maxn];
 18 void dfs(ll u,ll fa)
 19 {
 20     dep[u]=dep[fa]+1;
 21     fat[u]=fa;
 22     siz[u]=1;
 23     for(ll i=head[u];i;i=e[i].nxt)
 24     {
 25         ll v=e[i].v;
 26         if(v==fa)continue;
 27         dfs(v,u);
 28         siz[u]+=siz[v];
 29         if(!son[u] || siz[son[u]]<siz[v])son[u]=v;
 30     }
 31 }
 32 ll p,pos[maxn],fos[maxn],top[maxn];
 33 void getpos(ll u,ll fa)
 34 {
 35     pos[u]=++p;
 36     fos[p]=u;
 37     top[u]=fa;
 38     if(!son[u])return ;
 39     getpos(son[u],fa);
 40     for(ll i=head[u];i;i=e[i].nxt)
 41     {
 42         ll v=e[i].v;
 43         if(v!=fat[u] && v!=son[u])getpos(v,v);
 44     }
 45 }
 46 struct node
 47 {
 48     int lc,rc,sm,mx;
 49 }t[2001000];
 50 int rt[maxn],cnt;
 51 void update(ll cur)
 52 {
 53     t[cur].sm=t[t[cur].lc].sm+t[t[cur].rc].sm;
 54     t[cur].mx=max(t[t[cur].lc].mx,t[t[cur].rc].mx);
 55 }
 56 void change(ll & cur,ll l,ll r,ll p,ll x)
 57 {
 58     if(!cur)cur=++cnt;
 59     if(l==r)
 60     {
 61         t[cur].sm=t[cur].mx=x;
 62         return ;
 63     }
 64     ll mid=(l+r)>>1;
 65     if(p<=mid)change(t[cur].lc,l,mid,p,x);
 66     else change(t[cur].rc,mid+1,r,p,x);
 67     update(cur);
 68 }
 69 ll SUM,MAX;
 70 void query(ll cur,ll l,ll r,ll ql,ll qr)
 71 {
 72     if(!cur)return ;
 73     if(ql<=l && r<=qr)
 74     {
 75         SUM+=t[cur].sm;
 76         MAX=max(MAX,t[cur].mx);
 77         return ;
 78     }
 79     ll mid=(l+r)>>1;
 80     if(ql<=mid)query(t[cur].lc,l,mid,ql,qr);
 81     if(mid<qr)query(t[cur].rc,mid+1,r,ql,qr);
 82 }
 83 void ask(ll u,ll v)
 84 {
 85     SUM=0;MAX=0;
 86     ll cl=c[u];
 87     ll tpu=top[u],tpv=top[v];
 88     while(tpu!=tpv)
 89     {
 90         if(dep[tpu]<dep[tpv])
 91         {
 92             swap(u,v);
 93             swap(tpu,tpv);
 94         }
 95         query(rt[cl],1,n,pos[tpu],pos[u]);
 96         u=fat[tpu];tpu=top[u];
 97     }
 98     if(dep[u]>dep[v])swap(u,v);
 99     query(rt[cl],1,n,pos[u],pos[v]);
100 }
101 int main()
102 {
103     scanf("%d%d",&n,&m);
104     for(ll i=1;i<=n;++i)scanf("%d%d",w+i,c+i);
105     for(ll u,v,i=1;i<n;++i)
106     {
107         scanf("%d%d",&u,&v);
108         addage(u,v);addage(v,u);
109     }
110     dfs(1,0);
111     getpos(1,1);
112     for(ll i=1;i<=n;++i)change(rt[c[i]],1,n,pos[i],w[i]);
113     char s[4];
114     ll u,v;
115     while(m--)
116     {
117         scanf("%s%d%d",s,&u,&v);
118         if(s[1]=='W')
119         {
120             w[u]=v;
121             change(rt[c[u]],1,n,pos[u],v);
122         }
123         else if(s[1]=='C')
124         {
125             change(rt[c[u]],1,n,pos[u],0);
126             c[u]=v;
127             change(rt[c[u]],1,n,pos[u],w[u]);
128         }
129         else if(s[1]=='S')
130         {
131             ask(u,v);
132             printf("%d\n",SUM);
133         }
134         else
135         {
136             ask(u,v);
137             printf("%d\n",MAX);
138         }
139     }
140     return 0;
141 }
View Code

 

转载于:https://www.cnblogs.com/gryzy/p/10479157.html

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

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

相关文章

System variables, logging and the Execute SQL Task...(zz)

原文地址http://sqljunkies.com/WebLog/knight_reign/archive/2005/02/27/8187.aspxHeres something useful you can do with system variables and the SQL Task. Logging in SSIS is more flexible and there are more options for logging destinations and formats then wi…

mysql linux文件_MySQL在Linux系统下配置文件详解

在日常的的开发过程中接触到了SQLServer和MySQL数据库的操作性问题&#xff0c;可能是以前接触的都是SQL Server&#xff0c;才开始接触MySQL&#xff0c;总感觉使用MySQL没有使用SQLserver那么顺手&#xff0c;一些关键的系统函数&#xff0c;比如说开窗、行转列、列转行、自增…

logger

log4j日志配置关键字: apache log4j 1、配置根Logger:log4j.rootLogger [ level ] , appenderName, appenderName2level&#xff1a;日志的级别&#xff0c;指定这条日志信息的重要性。分为ALL < DEBUG < INFO < WARN 一般常用的为 DEBUG &#xff0c; INFO &#xf…

如何实现从wgs-84到beijing54的坐标转换

摘要&#xff1a;关于这个坐标系的转化网上有很多文章探讨了各种转换的方法。通过自己的学习&#xff0c;我自己做了一下总结&#xff0c;同时给出了其中要遇到的部分术语和数据&#xff0c;方便以后查阅使用。主要介绍的是&#xff1a;3参数&#xff08;七参数&#xff09;转换…

增删改查(curd)

curd的解释: 代表创建&#xff08;Create&#xff09;、更新&#xff08;Update&#xff09;、读取&#xff08;Retrieve&#xff09;和删除&#xff08;Delete&#xff09; 查询基本使用 查询所有列select * from 表名; 例&#xff1a; select * from classes; 查询指定列可以…

mysql group by 别名_[转]为什么group by后面不能使用别名(除MySQL)

同事工作中遇到一个问题&#xff1a;select count(billingdate),to_char(billingdate,YYYYmm) monthfrom tu_tradewhere to_char(billingdate,YYYY) 2017and reportstat 30group by month;-----执行报错&#xff0c;cant resolve month............因为Sql语句执行顺序(7) …

R内存扩展 win7内存扩展

安装包 imdiskinst 文件 램디스크 사용http://www.ltr-data.se/ http://cruciancar.blog.me/150101634586 --TEMP 변수 TEMP,TMP%USERPROFILE%\AppData\Local\Temp%USERPROFILE%\AppData\Local\Temp --Licensehttp://linsoo.co.kr/2281 --추가imdisk.exe -a -t vm -m r: -s 102…

POJ 1150 The Last Non-zero Digit 数论+容斥

POJ 1150 The Last Non-zero Digit 数论容斥 题目地址: POJ 1150 题意&#xff1a; 求排列P(n, m)后面第一个非0的数。 分析&#xff1a; 为了熟悉题目中的理论。我先做了俩0基础的题目&#xff1a; POJ 1401。题解见&#xff1a;POJ 1401 && ZOJ 2202 Factorial 阶乘…

redis mysql原理_MYSQL MONGODB REDIS 同步原理以及高可用性对比

MySQL1、异步复制&#xff1a;2、半同步复制&#xff1a;同步出现超时后会自动变回异步复制&#xff1b;MongoDBMongoDB的副本集是一组mongod进程的集合&#xff0c;提供冗余和高可用性。最小的的副本集包含(1个primary、1个secondary和1个arbiter)&#xff0c;大多数的部署包含…

使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性...

<system.web.extensions><scripting><webServices><jsonSerialization maxJsonLength"1024000" /></webServices></scripting> </system.web.extensions> 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字…

XML数据岛(XML Data Island)(只适用于ie)

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 在Microsoft Internet Explorer 5.0及以后的版本里里&#xff0c;你可以利用XML元素来创建数据岛&#xff0c;数据岛就是被HTML页面引用或包含的XML数据&#xff0c;XML数据可以包含…

并不对劲的bzoj3994:loj2185:p3327[SDOI2015]约数个数和

题目大意 设d(x)为x的约数个数&#xff0c;\(t\)组询问&#xff0c;给定\(n,m\)(\(t,m,n\leq5*10^4\))&#xff0c;求$ \sum^n_{i1}\sum^m_{j1}d(i*j)$ 题解 假设\(n\leq m\) 设\(ip_1^{a_1}*p_2^{a_2}*...*p_k^{a_k},jp_1^{b_1}*p_2^{b_2}*...*p_k^{b_k}\) 对于\(i*j\)的某个约…

mysql redo原子写_InnoDB如何保证redolog的完整性?

redo log里记录的只是对数据库页面的更改&#xff0c;它记录着类似『更改页面x 的指定偏移量的数据为k』这样的信息&#xff0c;是完全二进制的log(数据库原理概念上的&#xff0c;不是指MySQL binlog&#xff0c;MySQL binlog不是二进制log)&#xff1b;在redo log里并没有存储…

ArcGIS 9.2 Server Pack 5 蓄势待发

ArcGIS 9.2补丁真是不少&#xff0c;快把开发人员给淹没了&#xff0c;之前版本的ArcGIS从来没有发布过sp4&#xff0c;现在已经通知马上要发布sp5&#xff0c;修正了大量desktop、engine、server上的bug&#xff0c;估计这应该是9.2最后一组补丁了&#xff0c;记得上次Jack来北…

jenkins maven没有使用全局设置文件地址_Jenkins手把手图文教程「基于Jenkins 2.164.1」...

一、下载前往https://jenkins.io/download/ &#xff0c;按需下载。如用于生产&#xff0c;建议下载Long-term Support (LTS) 版本&#xff0c;这样能够获得相对长期的维护&#xff1b;如想体验最新的功能&#xff0c;可尝试 Weekly 版本。可以直接下载特定系统专属的版本&…

游戏数值策划-经验值计算公式设计(自百度文库)

较复杂的概念源自于设计师对游戏整体的把握&#xff0c;例如我们在设计游戏中主角的成长经验值时&#xff0c;并不能随意给出个公式就了事&#xff0c;那是毫不负责任的。 经验计算的基础模型 我们通常说的成长所需经验公式大多是&#xff1a; 每级升级所需经验Lv^3*修正值修正…

[原创]flex 3 + .net开发flash Remoting一 --- 开发环境

flex 3 .net开发flash Remoting一 --- 开发环境 本篇文章将介绍flash Remoting 开发的必备的运行环境和相关配置过程&#xff1a;一。开发必备环境。 1. flex 3&#xff0c;请从Adobe官方网站下载或其它地方找D版(目前为止D版还没有出)。 2. Visual Studio 2005&#…

【转】winform回车变为tab

源地址&#xff1a;http://www.cnblogs.com/wohexiaocai/p/4302200.html转载于:https://www.cnblogs.com/haizine/p/10484454.html

接视频Java 数据库

http://pan.baidu.com/s/1mg1EYAO windows各种版本map.centerAndZoom(point,15);这句话可以指向地图的不同位置百度云http://developer.baidu.com/map/jsdemo.htm#i1_1?qq-pf-topcqq.c2c1 百度云粉丝 http://yun.baidu.com/share/home?uk1814500964&viewshare#categor…

Lachesis Shield 设计上的抉择

最近有很多朋友和同学跟我谈起 Lachesis Shield 设计上的一些问题。我想我需要总结一下我的设计策略&#xff0c;虽然这是个看起来简单得不能再简单的工具。我面临的选择&#xff1a;1 界面位置显然&#xff0c;有很多位置可以摆放这么个不起眼的东西&#xff0c;比如说&#x…