XJOI网上同步训练DAY2 T2

【问题描述】

火车司机出秦川跳蚤国王下江南共价大爷游长沙。每个周末勤劳的共价大爷都会开车游历长沙市。

长沙市的交通线路可以抽象成为一个+vQAs41AwkwWZ+vXf68b+3J5ZveVAdpMCGVQOjcM 个点J68NgHAFuIkvhkay6OAAAAAElFTkSuQmCC 条边的无向图点编号为R1lainMTEKSIEdBMO92OzgSAY1QAM0MebJ0zZee3+vQAs41AwkwWZ+vXf68b+3J5ZveVAdpMCGVQOjcM 任意两点间均存在恰好一条路径显然两个点之间最多也只会有一条边相连。有一个包含一些点对4MY7VQMhzGhGdjSPgjYPqtCvx7snemVPVXcsmLsg可重集合vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 共价大爷的旅行路线是这样确定的每次他会选择vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中的某一对点4MY7VQMhzGhGdjSPgjYPqtCvx7snemVPVXcsmLsg 并从bTvyDHlf5znlxfZtfe4ZK8WMS8Pv2zNSWq4a7dDm 出发沿着唯一路径到达Huyd6ZU9VdyyYuyBWHl9yBQCs3l0oZz2AXwAAAAB

小L是共价大爷的脑残粉为了见到共价大爷的尊容小L决定守在这张图的某条边上等待共价大爷的到来。为了保证一定能见到他显然小L必须选择共价大爷一定会经过的边——也就是所有共价大爷可能选择的路径都经过的边

现在小L想知道如果他守在某一条边是否一定能见到共价大爷。

然而长沙市总是不断的施工也就是说可能某个时刻某条边会断开同时这个时刻一定也有某条新边会出现且任意时刻图都满足任意两点间均存在恰好一条路径的条件。注意断开的边有可能和加入的新边连接着相同的两个端点。共价大爷的兴趣也会不断变化所以vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX也会不断加入新点对或者删除原有的点对。当然L也有可能在任何时候向你提出守在某一条边是否一定能见到共价大爷的问题。你能回答小L的所有问题吗

【输入格式】

从文件travel.in 中读入数据。

输入的第一行包含一个整数c23hoitOuTp40h+jWNThf1EwnlDyijvJK6Cc2P+9 表示测试数据编号如第一组数据的vaT7jVXWt7TTF8iYj0vF0Kjxhqn1ALBn5DxDvw2s 样例数据的c23hoitOuTp40h+jWNThf1EwnlDyijvJK6Cc2P+9 可以忽略。

输入的第二行包含两个整数TxQV1LafCpk9TxR1zeAAJNjHxmxUtSJDjZiTHHlJ 分别表示图中的点数以及接下来会发生的事件数事件的定义下文中会有描述。初始时vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 为空。

接下来J68NgHAFuIkvhkay6OAAAAAElFTkSuQmCC 行每行两个正整数0yp6q7lgwd0GsPD6jAH0XyDd6J2TfAAAAAElFTkS 表示点v65G64eEkhBqp5JQCjNxmPadPCMlyQnh8th0bbGFHuyd6ZU9VdyyYuyBWHl9yBQCs3l0oZz2AXwAAAAB 之间有一条无向边。

接下来lzGggQFPfSQBAHxNjXJtBL4HAAAAAElFTkSuQmCC 行每行描述一个事件每行的第一个数HuiV7ZU9UdC+YuiJWHKfjzdFtn9cxrf15samnW6a 表示事件的类型。

Q+HhYTAAAAABJRU5ErkJggg== 那么接下来有四个正整数TKnqruWDB3Qaw8VqOw6CLVFoIAADf0lhSQFypNAA 表示先删除连接点v65G64eEkhBqp5JQCjNxmPadPCMlyQnh8th0bbGFHuyd6ZU9VdyyYuyBWHl9yBQCs3l0oZz2AXwAAAAB 的无向边保证存在这样的无向边然后加入一条连接点MQzYwP8Px6ZtYgvbZsID5n25dYErdOLcmVGyQMP+1EVgg5fa2wAAAABJRU5ErkJggg== 的无向边保证操作后的图仍然满足题中所述条件。

NPwi14fDV9b9uL+h5nTbNDh4yPx6cfsqmqCY8EA0 那么接下来有两个正整数0yp6q7lgwd0GsPD6jAH0XyDd6J2TfAAAAAElFTkS 表示在vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中加入点对4MY7VQMhzGhGdjSPgjYPqtCvx7snemVPVXcsmLsg

GvQdP52jgFmjMYu5tux+2EKk21AAi1zM4rMxBNTg 那么接下来有一个正整数bTvyDHlf5znlxfZtfe4ZK8WMS8Pv2zNSWq4a7dDm 表示删除第bTvyDHlf5znlxfZtfe4ZK8WMS8Pv2zNSWq4a7dDm 个加入vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中的点对即在第bTvyDHlf5znlxfZtfe4ZK8WMS8Pv2zNSWq4a7dDmNPwi14fDV9b9uL+h5nTbNDh4yPx6cfsqmqCY8EA0 的事件中加入vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中的点对保证这个点对存在且仍然在vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中。

Huyd6ZU9VdyyYuyAWXmD8ebqts3rmtT8vNrU063T 那么接下来有两个正整数0yp6q7lgwd0GsPD6jAH0XyDd6J2TfAAAAAElFTkS 表示小L询问守在连接点v65G64eEkhBqp5JQCjNxmPadPCMlyQnh8th0bbGFHuyd6ZU9VdyyYuyBWHl9yBQCs3l0oZz2AXwAAAAB 的边上是否一定能见到共价大爷保证存在这样的无向边且此时vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 不为空。

【输出格式】

输出到travel.out中。

对于每个小L的询问输出“YES”或者“NO”均不含引号表示小L一定能或者不一定能见到共价大爷。

【样例输入1】

0

5 7

1 2

1 3

2 4

1 5

2 1 5

1 1 5 2 5

4 2 5

2 1 4

4 2 5

3 1

4 2 4

【样例输出1】

YES

NO

YES

【样例说明1】

最开始将点对cJUvJtkQvTIGAgC8exhISJqlNQAAAABJRU5ErkJg 加入到vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中此时点1和点5之间的路径是+tcDJcqSHL8fPvqp2LSpgNVpqimobmAVda3tNMXy

接着将连接点1和点5的边断开加入连接点2和点5的边我们发现图仍然满足题中所述条件且点1和点5之间的路径是402vEpGSLN1iINh6CUAtN8SeLEvATUAAAAASUVOR 经过点了2和点5之间的边因此第一个询问答案是YES。

接着将点对gxjtVAyFcBnNIaSsRshMEvj+4yheTbIheGQMBAFO 加入到vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中点1和点4之间的路径是3+YwiOndTv0wfD0FQBjVAxwdjc1BgAAAABJRU5Er 没有经过点2和点5之间的边因此第二个询问答案是NO。

接着我们删除了第一个加入到vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中的点对也就是点对cJUvJtkQvTIGAgC8exhISJqlNQAAAABJRU5ErkJg 此时vvDB1a9kj37MgzQYgdFDyOvXvKUHcmYgYJHD9GAX 中唯一的点对就是gxjtVAyFcBnNIaSsRshMEvj+4yheTbIheGQMBAFO 经过了点2和点4之间的边因此最后一个询问答案是YES。

【样例输入输出2】

见下发的travel / travel1.intravel / travel1.ans

【样例输入输出3】

见下发的travel / travel2.intravel / travel2.ans这组数据中PV490Sv7KnqjgVzF8TKwxT8ebqts3rmtT8vNrU06

【数据规模和约定】

数据点

+vQAs41AwkwWZ+vXf68b+3J5ZveVAdpMCGVQOjcM 的规模

lzGggQFPfSQBAHxNjXJtBL4HAAAAAElFTkSuQmCC 的规模

HuiV7ZU9UdC+YuiJWHKfjzdFtn9cxrf15samnW6a =

备注

1

Z78gPcgMuceyOYxQO2fcrBMYTCtz9GyVIOAzq9ly

UBpm5JAojtUDQxKMemCgAQCtYTMd75i59AAAAABJ

1,2,3,4

 

2

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

2,4

 

3

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

2,4

 

4

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

2,3,4

 

5

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

2,3,4

 

6

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

1,2,3,4

任意时刻|8PU8tlU1WIR5zCo23OlDq9WVlnf0k5fIGM+upk8e

7

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

1,2,3,4

任意时刻|8PU8tlU1WIR5zCo23OlDq9WVlnf0k5fIGM+upk8e

8

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

1,2,3,4

 

9

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

1,2,3,4

 

10

Tv7HflBbqC1OHZPMgqH7PsVAuMJBe7+jRJFHAZ1e

xEK9olZ29X8ZQh2HQd2eK3XYYhtmqFzM4rMxWKUY

1,2,3,4

 

对于所有数据Z78jP8j9tBbHHkCssr6lnb5Axny0mOQwqNtzpQ5fLiDeHgUUuZvHZGOx28OilzT+URndxhNvwuHsUoIH9fj3RO9sqeqOxbMXRArj9UZ6FpItYIOAAAIobgwy

思路:本来想把边转换成点来做的,但是YY了一下发现,当把边拆掉的时候就不能维护信息了,题解的做法很玄妙:把每个路径的两个端点都异或上同一个随机值,然后询问的时候询问x子树和y子树内异或和是不是都等于ans,ans为每条边的随机值异或和。

 

  1 #include<algorithm>
  2 #include<cstdio>
  3 #include<cmath>
  4 #include<cstring>
  5 #include<iostream>
  6 int ch[500005][2],rev[500005],sum[500005],o[500005];
  7 int fa[500005];
  8 int c[500005][3],st[500005],ans;
  9 int n,m,tot;
 10 int read(){
 11     int t=0,f=1;char ch=getchar();
 12     while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
 13     while ('0'<=ch&&ch<='9'){t=t*10+ch-'0';ch=getchar();}
 14     return t*f;
 15 }
 16 bool isroot(int x){
 17     return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;
 18 }
 19 void pushdown(int x){
 20     int l=ch[x][0],r=ch[x][1];
 21     if (rev[x]){
 22         rev[x]^=1;
 23         rev[l]^=1;rev[r]^=1;
 24         std::swap(ch[x][0],ch[x][1]);
 25     }
 26 }
 27 void updata(int x){
 28     int l=ch[x][0],r=ch[x][1];
 29     sum[x]=o[x]^sum[l]^sum[r];
 30 }
 31 void rotate(int x){
 32     int y=fa[x],f=ch[y][0]!=x;
 33     if (ch[y][f]=ch[x][f^1]) fa[ch[y][f]]=y;
 34     fa[x]=fa[y];if (!isroot(y)) ch[fa[y]][ch[fa[y]][0]!=y]=x;
 35     updata(ch[fa[y]=x][f^1]=y);
 36 }
 37 void splay(int x){
 38     int top=0;st[++top]=x;
 39     for (int i=x;!isroot(i);i=fa[i])
 40      st[++top]=fa[i];
 41     for (int i=top;i;i--) pushdown(st[i]);
 42     while (!isroot(x)){
 43         int y=fa[x],z=fa[y];
 44         if (!isroot(y)){
 45             if (ch[y][0]==x^ch[z][0]==y) rotate(x);
 46             else rotate(y);
 47         }
 48         rotate(x);
 49     } 
 50     updata(x);
 51 }
 52 void access(int x){
 53     for (int t=0;x;t=x,x=fa[x]){
 54         splay(x);
 55         o[x]^=sum[t]^sum[ch[x][1]];
 56         ch[x][1]=t;
 57         updata(x);
 58     }
 59 }
 60 void makeroot(int x){
 61     access(x);splay(x);rev[x]^=1;
 62 }
 63 void link(int x,int y){
 64     makeroot(x);makeroot(y);fa[x]=y;o[y]^=sum[x];updata(y);
 65 }
 66 void cut(int x,int y){
 67     makeroot(y);access(y);
 68     splay(x);
 69     fa[x]=0;o[y]^=sum[x];updata(y);
 70 }
 71 void add(int x,int y){
 72     access(x);
 73     splay(x);
 74     o[x]^=y;
 75     updata(x);
 76 }
 77 int main(){
 78     int Id=read();
 79     n=read();m=read();
 80     srand(std::abs(n-m)*3+138);
 81     for (int i=1;i<n;i++){
 82         int x=read(),y=read();
 83         link(x,y);
 84     }
 85     while (m--){
 86         int type=read();
 87         if (type==1){
 88             int x=read(),y=read(),u=read(),v=read();
 89             cut(x,y);link(u,v);
 90         }else if (type==2){
 91             tot++;
 92             c[tot][0]=read();c[tot][1]=read();int z=rand();
 93             while (!z) z=rand();
 94             c[tot][2]=z;
 95             add(c[tot][0],z);add(c[tot][1],z);ans^=z;
 96         }else if (type==3){
 97             int k=read();
 98             add(c[k][0],c[k][2]);
 99             add(c[k][1],c[k][2]);
100             ans^=c[k][2];
101         }else{
102             int x=read(),y=read();
103             makeroot(x);access(y);
104             if (o[x]==ans&&o[y]==ans) puts("YES");
105             else puts("NO");
106         }
107     }
108 }

 

转载于:https://www.cnblogs.com/qzqzgfy/p/5616525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品口价企稳等方面的提振,经济显现稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值