2816

思路:

  多个LCT;

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 10005
#define ll long long
int val[maxn];
struct LinkCutTreeType {
int f[maxn],Max[maxn],ch[maxn][],rev[maxn],sta[maxn],top,cnt[maxn];
void updata(int now)
{
Max[now]=val[now];
if(ch[now][]) Max[now]=max(Max[now],Max[ch[now][]]);
if(ch[now][]) Max[now]=max(Max[now],Max[ch[now][]]);
}
void downdata(int now)
{
if(rev[now])
{
rev[now]^=,swap(ch[now][],ch[now][]);
if(ch[now][]) rev[ch[now][]]^=;
if(ch[now][]) rev[ch[now][]]^=;
}
}
bool isroot(int now)
{
return (ch[f[now]][]!=now)&&(ch[f[now]][]!=now);
}
void rotate(int now)
{
int fa=f[now],ffa=f[fa],l=(ch[fa][]==now),r=l^;
if(!isroot(fa)) ch[ffa][ch[ffa][]==fa]=now;
f[now]=ffa,f[fa]=now,ch[fa][l]=ch[now][r],ch[now][r]=fa;
if(ch[fa][l]) f[ch[fa][l]]=fa;updata(fa);
}
void splay(int now)
{
top=,sta[]=now;int fa,ffa;
for(int i=now;!isroot(i);i=f[i]) sta[++top]=f[i];
while(top) downdata(sta[top--]);
while(!isroot(now))
{
fa=f[now],ffa=f[fa];
if(!isroot(fa)) rotate(((ch[ffa][]==fa)^(ch[fa][]==now))?now:fa);
rotate(now);
}
updata(now);
}
void access(int now)
{
for(int i=;now;i=now,now=f[now]) splay(now),ch[now][]=i;
}
void makeroot(int now)
{
access(now),splay(now),rev[now]^=;
}
void cut(int x,int y)
{
makeroot(x),access(y),splay(y);
f[x]=,ch[y][]=,cnt[x]--,cnt[y]--;
}
void link(int x,int y)
{
makeroot(x),f[x]=y,splay(x),cnt[x]++,cnt[y]++;
}
bool iscon(int x,int y)
{
while(f[x]) x=f[x];
while(f[y]) y=f[y];
return x==y;
}
int query(int u,int v)
{
makeroot(u),access(v),splay(v);
return Max[v];
}
};
struct LinkCutTreeType lct[];
int n,m,c,k;
map<ll,int>Map;
inline void in(int &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'')Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
}
ll Mapped(int u,int v)
{
if(u>v) swap(u,v);
return (ll)u*n*n+v;
}
int main()
{
//freopen("data.txt","r",stdin);
freopen("networkzj.in","r",stdin);
freopen("networkzj.out","w",stdout);
in(n),in(m),in(c),in(k);int u,v,w,op;ll pos,id;
for(int i=;i<=n;i++) in(val[i]);
while(m--) in(u),in(v),in(w),Map[Mapped(u,v)]=w+,lct[w].link(u,v);
while(k--)
{
in(op);
if(op==)
{
in(u),in(val[u]);
for(int i=;i<c;i++) lct[i].splay(u);
}
if(op==)
{
in(u),in(v),in(w),id=Mapped(u,v),pos=Map[id]-;
if(pos<)
{
puts("No such edge.");
continue;
}
if(pos==w)
{
puts("Success.");
continue;
}
if(lct[w].cnt[u]>=||lct[w].cnt[v]>=)
{
puts("Error 1.");
continue;
}
if(lct[w].iscon(u,v))
{
puts("Error 2.");
continue;
}
lct[pos].cut(u,v),lct[w].link(u,v),Map[id]=w+;
puts("Success.");
}
if(op==)
{
in(w),in(u),in(v);
if(!lct[w].iscon(u,v))
{
puts("-1");
continue;
}
printf("%d\n",lct[w].query(u,v));
}
}
return ;
}

AC日记——[ZJOI2012]网络 bzoj 2816的更多相关文章

  1. AC日记——无线网络发射器选址 洛谷 P2038

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...

  2. AC日记——[Hnoi2017]影魔 bzoj 4826

    4826 思路: 主席树矩阵加减+单调栈预处理: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 ...

  3. AC日记——[LNOI2014]LCA bzoj 3626

    3626 思路: 离线操作+树剖: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #defin ...

  4. AC日记——[SCOI2009]游戏 bzoj 1025

    [SCOI2009]游戏 思路: 和为n的几个数最小公倍数有多少种. dp即可: 代码: #include <bits/stdc++.h> using namespace std; #de ...

  5. AC日记——[HNOI2014]世界树 bzoj 3572

    3572 思路: 虚树+乱搞: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300005 #define ...

  6. AC日记——NOI2016区间 bzoj 4653

    4653 思路: 线段树,指针滑动: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1000005 #def ...

  7. AC日记——Rmq Problem bzoj 3339

    3339 思路: 恶心: 代码: #include <cstdio> #include <cstring> #include <iostream> #include ...

  8. AC日记——[HNOI2008]越狱 bzoj 1008

    1008 思路: 越狱情况=总情况-不越狱情况: 代码: #include <cstdio> #include <cstring> #include <iostream& ...

  9. AC日记——[FJOI2007]轮状病毒 bzoj 1002

    1002 思路: 打表找规律: dp[i]=dp[i-1]*3-dp[i-2]+2; 套个高精就a了: 代码: #include <cstdio> #include <cstring ...

随机推荐

  1. 二叉树中和为某一值得路径 java实现

    本题来自<剑指offer> 路径为从根节点到叶节点一条路径,路径经过的各节点数值之和等于某一给定数值,则打印路径上的节点 因为需要打印满足条件的路径节点信息和各节点之和,需要栈记录经过的节 ...

  2. arp协议及简单应用

    1:什么是arp协议 参考文章:http://blog.csdn.net/tigerjibo/article/details/7351992 全称是:Address Resolution Protoc ...

  3. stout代码分析之九:c++11容器新特性

    stout大量使用了c++11的一些新特性,使用这些特性有利于简化我们的代码,增加代码可读性.以下将对一些容器的新特性做一个总结.主要两方面: 容器的初始化,c++11中再也不用手动insert或者p ...

  4. OopenCV复习及函数深入理解(轮廓查询及绘图)

    核心函数:(后面标明号的,下面有解析) int cvFindContours(Iplimage* img,//这是输入函数,必须是8bit,单通道的图像---1 CvMemStorage* stora ...

  5. redis安装----非基于lnmp安装

    在 Ubuntu 系统安装 Redi 可以使用以下命令: $sudo apt-get update $sudo apt-get install redis-server 启动 Redis $ redi ...

  6. BAT script to set local account password never expire

    BAT script wmic UserAccount where Name="account123" set PasswordExpires=False

  7. [freemarker篇]02.生成HTML的静态页面

    昨天完成了一部分的今天在上次的基础上,完成完成生成HTML静态页面的操作,中间会涉及一点标签的简单使用.今天的代码有一丢丢的对付的感觉!抱歉了,直接就上代码吧!求原谅! 项目结构目录如下: 第一步,新 ...

  8. 最简单的图文教程,几步完成Git的公私钥配置

    操作的前提是,你有git账号,并且在自己的电脑上已经装好了TorToiseGit工具.下面开始简单的教程: 第一步:Windows-->所有程序-->TortoiseGit-->Pu ...

  9. 不可思议的OOM

    本文发现了一类OOM(OutOfMemoryError),这类OOM的特点是崩溃时java堆内存和设备物理内存都充足,下文将带你探索并解释这类OOM抛出的原因. 关键词:  OutOfMemoryEr ...

  10. js_页面关闭beforeunload事件

    做圆桌爆文公众号的时候,需要对阅读的文章进行时间统计.是这个公众号的核心功能,客户把文章转发到朋友圈或者转给朋友,记录谁阅读此文章和阅读时长进行记录,从而展示给客户. 功能点是,关闭页面时触发事件,请 ...