0.0 2594

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;

inline void Read(int &Num)
{
	char c = getchar();
	while (c < ‘0‘ || c > ‘9‘) c = getchar();
	Num = c - ‘0‘; c = getchar();
	while (c >= ‘0‘ && c <= ‘9‘)
	{
		Num = Num * 10 + c - ‘0‘;
		c = getchar();
	}
}

inline int gmax(int a, int b) {return a > b ? a : b;}
inline int gmin(int a, int b) {return a < b ? a : b;}

const int MaxN = 100000 + 5, MaxM = 1000000 + 5, MaxT = 1100000 + 5, MaxQ = 100000 + 5;

int n, m, q, Top;
int Father[MaxT], Son[MaxT][2], V[MaxT], T[MaxT], f[MaxN], Size[MaxN], Ans[MaxQ];

bool isRoot[MaxT], Rev[MaxT];

struct ES
{
	int u, v, w, Idx;
	bool Del;
	ES() {}
	ES(int x, int y)
	{
		u = x; v = y;
		if (u > v) swap(u, v);
	}
} E[MaxM];

inline bool operator < (ES e1, ES e2)
{
	return (e1.u < e2.u) || (e1.u == e2.u && e1.v < e2.v);
}

struct QR
{
	int f, x, y, Pos;
} Q[MaxQ];

inline bool Cmp(ES e1, ES e2)
{
	return e1.w < e2.w;
}

inline int Find(int x)
{
	int i, j, k;
	j = x;
	while (j != f[j]) j = f[j];
	i = x;
	while (i != j)
	{
		k = i;
		i = f[i];
		f[k] = j;
	}
	return j;
}

inline void UN(int x, int y)
{
	if (Size[x] == Size[y]) ++Size[x];
	if (Size[x] > Size[y]) f[y] = x;
	else f[x] = y;
}

/********************* LCT Begin *********************/

inline void Update(int x)
{
	if (V[T[Son[x][0]]] > V[T[Son[x][1]]) T[x] = T[Son[x][0]];
	else T[x] = T[Son[x][1]];
	if (V[x] > V[T[x]]) T[x] = x;
}

inline void Reverse(int x)
{
	Rev[x] = !Rev[x];
	swap(Son[x][0], Son[x][1]);
}

inline void PushDown(int x)
{
	if (!Rev[x]) return;
	Rev[x] = false;
	if (Son[x][0]) Reverse(Son[x][0]);
	if (Son[x][1]) Reverse(Son[x][1]);
}

inline int GetDir(int x)
{
	if (x == Son[Father[x]][0]) return 0;
	else return 1;
}

void Rotate(int x)
{
	int y = Father[x], f;
	PushDown(y); PushDown(x);
	if (x == Son[y][0]) f = 1;
	else f = 0;
	if (isRoot[y])
	{
		isRoot[y] = false;
		isRoot[x] = true;
	}
	else
	{
		if (y == Son[Father[y]][0]) Son[Father[y]][0] = x;
		else Son[Father[y]][1] = x;
	}
	Father[x] = Father[y];
	Son[y][f ^ 1] = Son[x][f];
	if (Son[x][f]) Father[Son[x][f]] = y;
	Son[x][f] = y;
	Father[y] = x;
	Update(y); Update(x);
}

void Splay(int x)
{
	int y;
	while (!isRoot[x])
	{
		y = Father[x];
		if (isRoot[y])
		{
			Rotate(x);
			break;
		}
		if (GetDir(y) == GetDir(x)) Rotate(y);
		else Rotate(x);
		Rotate(x);
	}
}

int Access(int x)
{
	int y = 0;
	while (x != 0)
	{
		Splay(x);
		PushDown(x);
		if (Son[x][1]) isRoot[Son[x][1]] = true;
		Son[x][1] = y;
		if (y) isRoot[y] = false;
		Update(x);
		y = x;
		x = Father[x];
	}
	return y;
}

inline void Make_Root(int x)
{
	int t = Access(x);
	Reverse(t);
}

/********************* LCT End *********************/

int main()
{
	scanf("%d%d%d", &n, &m, &q);
	int a, b, c, t;
	for (int i = 1; i <= m; ++i)
	{
		Read(a); Read(b); Read(c);
		E[i] = ES(a, b);
		E[i].w = c;
	}
	sort(E + 1, E + m + 1, Cmp); // by ES.w
	for (int i = 1; i <= m; ++i)
	{
		E[i].Idx = i;
		V[n + i] = E[i].w;
		T[n + i] = n + i;
	}
	for (int i = 1; i <= n + m; ++i)
	{
		isRoot[i] = true;
		Father[i] = 0;
	}
	sort(E + 1, E + m + 1); // by ES.u && ES.v
	for (int i = 1; i <= q; ++i)
	{
		Read(Q[i].f); Read(Q[i].x); Read(Q[i].y);
		if (Q[i].f == 2)
		{
			t = lower_bound(E + 1, E + m + 1, ES(Q[i].x, Q[i].y)) - E;
			E[t].Del = true;
			Q[i].Pos = E[t].Idx;
		}
		else ++Top;
	}
	for (int i = 1; i <= n; ++i)
	{
		f[i] = i;
		Size[i] = 1;
	}
	sort(E + 1, E + m + 1, Cmp);
	int Cnt = 0, fx, fy;
	for (int i = 1; i <= m; ++i)
	{
		if (E[i].Del) continue;
		fx = Find(E[i].u); fy = Find(E[i].v);
		if (fx == fy) continue;
		UN(fx, fy);
		Link(E[i].u, n + i); Link(E[i].v, n + i);
		if (++Cnt == n - 1) break;
	}
	for (int i = q; i >= 1; --i)
	{
		Make_Root(Q[i].x);
		t = Access(Q[i].y);
		if (Q[i].f == 1) Ans[Top--] = V[T[t]];
		else
		{
			if (E[Q[i].Pos].w >= V[T[t]]) continue;
			Cut(Q[i].x, T[t]); Cut(Q[i].y, T[t]);
			Link(Q[i].x, Q[i].Pos); Link(Q[i].y, Q[i].Pos);
		}
	}
	return 0;
}

  

时间: 2024-11-10 02:36:02

0.0 2594的相关文章

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: &#39;127.0.0.1:59770&#39;, transport: &#39;socket&#39;

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro

云计算与虚拟化的区别0.0

1.传统数据中心面临的问题 在讲云计算和虚拟化之前,在没有云计算之前我们传统统数据中心面临的问题. 1.1.传统IDC托管 买台机器-放到IDC-安装系统-部署应用-买个域名-绑定上去-对外访问-ICP备案-ICP证(电子商务)-文网文(文化部备案)--公安局备案-接入备案(机房接入备案,备案现在机房管 ) 注销备案 -- 各种坑 北京不支持个人备案转公司备案. 域名转让(官方要求最多72小时)坑 72小时中有可能会出现 两方都给停了的风险. 一般招代理去做 1.2.IDC租用 IDC连续租三年

五年磨一剑:Java 开源博客 Solo 1.0.0 发布了!

从 Solo 第一个版本发布至今,已经过去 5 年了.今天我们非常自豪地宣布,Solo 1.0.0 正式发布,感谢一直以来关注 B3log 开源的朋友! 目前 B3log 开源有三款产品: GitHub 上 Star 数最多的 Java 博客 Solo Golang 黑科技之在线 IDE Wide 基于实时交互技术的社区 Sym 特性 基于标签的文章分类 博客/标签 Atom/RSS.Sitemap 输出 评论回复及邮件提醒 自定义页面.导航 多编辑器:Markdown.TinyMCE.Kind

语义化版本2.0.0

摘要 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订号:当你做了向下兼容的问题修正. 先行版本号及版本编译信息可以加到"主版本号.次版本号.修订号"的后面,作为延伸. 简介 在软件管理的领域里存在着被称作"依赖地狱"的死亡之谷,系统规模越大,加入的套件越多,你就越有可能在未来的某一天发现自己已深陷绝望之中. 在依赖高的系统中发布新版本套件可能很快会成为恶梦.如果依赖

100.64.0.0/10是用于运营商级NAT内网保留地址段,即CGN(carrier-grade NAT)

100.64.0.0/10 内网保留段,用于运营商级NAT即CGN(carrier-grade NAT),参见2012年4月所公布的RFC 6598文件 江苏公网IP地址不够, 今年已经采用这一段IP分配给用户了 http://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml

Spark1.0.0伪分布安装指南

?一.下载须知 软件准备: spark-1.0.0-bin-hadoop1.tgz   下载地址:spark1.0.0 scala-2.10.4.tgz    下载下载:Scala 2.10.4 hadoop-1.2.1-bin.tar.gz   下载地址:hadoop-1.2.1-bin.tar.gz jdk-7u60-linux-i586.tar.gz  下载地址:去官网下载就行,这个1.7.x都行 二.安装步骤 hadoop-1.2.1安装步骤,请看: http://my.oschina.

MongoDB { code: 18, ok: 0.0, errmsg: "auth fails" } 原因

MongoDB出现 { code: 18, ok: 0.0, errmsg: "auth fails" }  错误的原因: 1.账号密码错误 2.账号不属于该数据库 MongoDB { code: 18, ok: 0.0, errmsg: "auth fails" } 原因,布布扣,bubuko.com

idea启动tomcat服务失败 SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild:

我的工程是从eclipse生成的,个人习惯用idea开发.重复了一遍以往正常的不能再正常了的导入配置,结果遇到了如下问题: SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start comp

RT-Thread-v2.0.0移植到STM32及驱动LCD和测温

先简单记录下安装: 1. 安装 sourcery工具链或 keil都行 安装python 和 scons: 配置这些工具路径以及RT-Thread源码路径RTT_ROOT,添加到环境变量 2. 开始编译 bsp\stm32f10x工程,在编译以前需要稍微修改如下几个文件 rtconfig.py 此文件必须修改 rtconfig.h 此文件用于裁剪rt-thread(根据需要修改) 比如使用 keil工具来编译: 修改rtconfig.py, CROSS_TOOL='keil' EXEC_PATH

IntelliJ运行下载的Servlet时报错 Error running Tomcat 8.5.8: Unable to open debugger port (127.0.0.1:49551): java.net.SocketException

学习Java Servlet时,从Wrox上下载了示例代码,准备run/debug时发现以下错误: Error running Tomcat 8.5.8: Unable to open debugger port (127.0.0.1:49551): java.net.SocketException "Socket closed" /Users/GuQiang/Tomcat/apache-tomcat-8.5.8/bin/catalina.sh stopUsing CATALINA_B