首页 > 其他分享 >bzoj 2049 [Sdoi2008]Cave 洞穴勘测

bzoj 2049 [Sdoi2008]Cave 洞穴勘测

时间:2023-03-25 15:02:06浏览次数:70  
标签:Cave 洞穴 2049 辉辉 指令 Query Sdoi2008 终端机 通道


2049: [Sdoi2008]Cave 洞穴勘测


Time Limit: 10 Sec   Memory Limit: 259 MB

Submit: 8714  

Solved: 4143

[Submit][Status][Discuss]


Description


辉辉热衷于洞穴勘测。某天,他按照地图来到了一片被标记为JSZX的洞穴群地区。经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴。假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这些通道则被称之为这两个洞穴之间的一条路径。洞穴都十分坚固无法破坏,然而通道不太稳定,时常因为外界影响而发生改变,比如,根据有关仪器的监测结果,123号洞穴和127号洞穴之间有时会出现一条通道,有时这条通道又会因为某种稀奇古怪的原因被毁。辉辉有一台监测仪器可以实时将通道的每一次改变状况在辉辉手边的终端机上显示:如果监测到洞穴u和洞穴v之间出现了一条通道,终端机上会显示一条指令 Connect u v 如果监测到洞穴u和洞穴v之间的通道被毁,终端机上会显示一条指令 Destroy u v 经过长期的艰苦卓绝的手工推算,辉辉发现一个奇怪的现象:无论通道怎么改变,任意时刻任意两个洞穴之间至多只有一条路径。因而,辉辉坚信这是由于某种本质规律的支配导致的。因而,辉辉更加夜以继日地坚守在终端机之前,试图通过通道的改变情况来研究这条本质规律。然而,终于有一天,辉辉在堆积成山的演算纸中崩溃了……他把终端机往地面一砸(终端机也足够坚固无法破坏),转而求助于你,说道:“你老兄把这程序写写吧”。辉辉希望能随时通过终端机发出指令 Query u v,向监测仪询问此时洞穴u和洞穴v是否连通。现在你要为他编写程序回答每一次询问。已知在第一条指令显示之前,JSZX洞穴群中没有任何通道存在。


Input


第一行为两个正整数n和m,分别表示洞穴的个数和终端机上出现过的指令的个数。以下m行,依次表示终端机上出现的各条指令。每行开头是一个表示指令种类的字符串s("Connect”、”Destroy”或者”Query”,区分大小写),之后有两个整数u和v (1≤u, v≤n且u≠v) 分别表示两个洞穴的编号。


Output


对每个Query指令,输出洞穴u和洞穴v是否互相连通:是输出”Yes”,否则输出”No”。(不含双引号)


Sample Input


样例输入1 cave.in
200 5
Query 123 127
Connect 123 127
Query 123 127
Destroy 127 123
Query 123 127
样例输入2 cave.in

3 5
Connect 1 2
Connect 3 1
Query 2 3
Destroy 1 3
Query 2 3


Sample Output


样例输出1 cave.out
No
Yes
No


样例输出2 cave.out

Yes
No


HINT


数据说明 10%的数据满足n≤1000, m≤20000 20%的数据满足n≤2000, m≤40000 30%的数据满足n≤3000, m≤60000 40%的数据满足n≤4000, m≤80000 50%的数据满足n≤5000, m≤100000 60%的数据满足n≤6000, m≤120000 70%的数据满足n≤7000, m≤140000 80%的数据满足n≤8000, m≤160000 90%的数据满足n≤9000, m≤180000 100%的数据满足n≤10000, m≤200000 保证所有Destroy指令将摧毁的是一条存在的通道本题输入、输出规模比较大,建议c\c++选手使用scanf和printf进行I\O操作以免超时


Source








【分析】

LCT练手题...不过还是觉得LCT不可调...




【代码】

//[SDOI2008]Cave 洞穴勘测
#include<iostream>
#include<cstring>
#include<cstdio>
#define ll long long
#define M(a) memset(a,0,sizeof a)
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=100005;
char s[10];
int n,m,top;
int f[mxn],ch[mxn][2],rev[mxn],size[mxn],st[mxn];
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
	return x*f;
}
inline bool isroot(int x)
{
	return (ch[f[x]][0]!=x && ch[f[x]][1]!=x);
}
inline int get(int x)
{
	if(ch[f[x]][0]==x) return 0;return 1;
}
inline void update(int x)
{
	size[x]=size[ch[x][0]]+size[ch[x][1]]+1;
}
inline void pushdown(int x)
{
	if(rev[x])
	{
		rev[ch[x][0]]^=1,rev[ch[x][1]]^=1;
		swap(ch[x][0],ch[x][1]);
		rev[x]=0;
	}
}
inline void rotate(int x)
{
	pushdown(x);
	int fa=f[x],fafa=f[fa],which=get(x);
	if(!isroot(fa)) ch[fafa][ch[fafa][1]==fa]=x;
	f[x]=fafa;
	ch[fa][which]=ch[x][which^1],f[ch[fa][which]]=fa;
	ch[x][which^1]=fa,f[fa]=x;
	update(fa),update(x);
}
inline void splay(int x)
{
	st[top=1]=x;
	for(int i=x;!isroot(i);i=f[i]) st[++top]=f[i];
	for(int i=top;i;i--) pushdown(st[i]);
	for(int fa;!isroot(x);rotate(x))
	  if(!isroot(fa=f[x])) rotate(get(x)==get(fa)?fa:x);
}
inline void access(int x)
{
	for(int y=0;x;y=x,x=f[x])
	  splay(x),ch[x][1]=y;
}
inline void makeroot(int x)
{
	access(x),splay(x),rev[x]^=1;
}
inline int find(int x)
{
	access(x),splay(x);
	while(ch[x][0]) x=ch[x][0];
	return x;
}
inline void link(int x,int y)
{
	makeroot(x);
	f[x]=y,splay(x);
}
inline void cut(int x,int y)
{
	makeroot(x);
	access(y),splay(y);
	f[x]=ch[y][0]=0;
}
int main()
{
	int i,j,x,y;
	char s[10];
	n=read(),m=read();
	while(m--)
	{
		scanf("%s",s);
		x=read(),y=read();
		if(s[0]=='C') link(x,y);
		else if(s[0]=='D') cut(x,y);
		else if(find(x)==find(y)) printf("Yes\n");else printf("No\n");
	}
	return 0;
}



标签:Cave,洞穴,2049,辉辉,指令,Query,Sdoi2008,终端机,通道
From: https://blog.51cto.com/u_15967757/6149503

相关文章

  • [SDOI2008] 仪仗队【题解】
    题目描述作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的\(N\timesN\)的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所......
  • [LeetCode] 2049. Count Nodes With the Highest Score
    Thereisa binary treerootedat 0 consistingof n nodes.Thenodesarelabeledfrom 0 to n-1.Youaregivena 0-indexed integerarray parents r......
  • UVALive 4015 Caves--树形dp
    原题链接:​​http://vjudge.net/problem/UVALive-4015​​题意:n个部落,编号0到n-1,n-1条路连接n个部落,连成一棵树,机器人从树根出发,问在最多走x米最多经过多少部落。分析:dp[i......
  • BZOJ4698-[sdoi2008] Sandy的卡片
    [sdoi2008]Sandy的卡片时限0.5sSandy和Sue的热衷于收集干脆面中的卡片。然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型。......
  • vulnhub靶场Trollcave
    0x000靶场描述Trollcave是一个易受攻击的VM,在Vulnhub和信息安全战争游戏的传统中。你从一个你一无所知的虚拟机开始-没有用户名,没有密码,只是你可以在网络上看到的东西......
  • [欧拉函数] P2158 [SDOI2008] 仪仗队
    题目描述作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N\timesNN×N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所......
  • BZOJ 2190([SDOI2008]仪仗队-O(n)线性筛欧拉函数)
    2190:[SDOI2008]仪仗队TimeLimit: 10Sec  MemoryLimit: 259MBSubmit: 521  Solved: 331[​​Submit​​][​​Status​​][​​Discuss​​]Descri......
  • 靶场VNH练习(3)TROLLCAVE: 1.2
    靶场名称:TROLLCAVE:1.2难度:简单目标:拿到root账户的flag文件下载链接:https://www.vulnhub.com/entry/trollcave-12,230/环境搭建使用虚拟机打开ova文件这里没有IP,......
  • [SDOI2008]Sue的小球
    做题时间:2022.9.26\(【题目描述】\)一个平面直角坐标系中有\(N\)个小球,第\(i\)个小球初始时位于\((x_i,y_i)\),有一个速度\(v_i\),每一秒会沿着\(y\)轴竖直想下掉......
  • 3rd 2022/5/9 题目总结·数论篇·欧拉函数·【SDOI2008】仪仗队
    原题作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N*N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的生后方,根据其视线所及的学生人数......