可以发现,装备的合成是一个树形结构
对于一次合成,新建一个点表示这两个装备合成后的装备,成为这两个装备的父亲(一定要新建因为要兹瓷询问某个装备被合成前的属性)
然后某个装备的某个属性就相当于问这个装备的子树中某个属性的最大值,线段树在dfs序上查找就行了,因为属性数不多,对每种属性开一棵线段树

code:

#include<set>
#include<map>
#include<deque>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<complex>
#include<iostream>
#include<algorithm>
#define ll long long
#define inf 1e9
using namespace std;inline void read(int &x)
{char c;while(!((c=getchar())>='0'&&c<='9'));x=c-'0';while((c=getchar())>='0'&&c<='9') (x*=10)+=c-'0';
}
inline int _max(const int &x,const int &y){return x>y?x:y;}const int maxn = 3100;
const int maxm = 450;
const int maxq = 210000;int n,m,q;
int s[maxn][maxm];struct edge
{int y,nex;edge(){}edge(const int &_y,const int &_nex){y=_y;nex=_nex;}
}a[maxn<<1]; int len,fir[maxn];
inline void ins(const int x,const int y){a[++len]=edge(y,fir[x]);fir[x]=len;}int siz[maxn],fa[maxn],id[maxn],dfn,N;
int idx[maxn];
void dfs(const int x)
{siz[x]=1; id[x]=++dfn; idx[dfn]=x;for(int k=fir[x];k;k=a[k].nex){const int y=a[k].y;if(y!=fa[x]){fa[y]=x;dfs(y);siz[x]+=siz[y];}}
}int seg[maxm][maxn<<2],loc,c,k,lx,rx;
void build_(const int x,const int l,const int r)
{if(l==r) { seg[k][x]=s[idx[l]][k]; return ; }int mid=l+r>>1,lc=x<<1,rc=lc|1;build_(lc,l,mid); build_(rc,mid+1,r);seg[k][x]=_max(seg[k][lc],seg[k][rc]);
}
void upd(const int x,const int l,const int r)
{if(l==r) { seg[k][x]=c; return ; }int mid=l+r>>1,lc=x<<1,rc=lc|1;if(loc<=mid) upd(lc,l,mid);else upd(rc,mid+1,r);seg[k][x]=_max(seg[k][lc],seg[k][rc]);
}
int query(const int x,const int l,const int r)
{if(r<lx||rx<l) return 0;if(lx<=l&&r<=rx) return seg[k][x];int mid=l+r>>1,lc=x<<1,rc=lc|1;return _max(query(lc,l,mid),query(rc,mid+1,r));
}int nowi[maxn];
bool live[maxn];
struct qu
{int k,a,b,c;
}b[maxq];int main()
{read(n); read(m); read(q); N=n;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) read(s[i][j]);for(int i=1;i<=n;i++) nowi[i]=i,live[i]=true;for(int i=1;i<=q;i++){int x,y;read(b[i].k); read(x); read(y); read(b[i].c);b[i].a=x; b[i].b=y;if(b[i].k==1){ins(++N,nowi[x]); ins(nowi[x],N);ins(N,nowi[y]); ins(nowi[y],N);nowi[y]=N;live[x]=false;}}N++;for(int i=1;i<=n;i++) if(live[i]) ins(N,nowi[i]);dfn=0; dfs(N);for(int i=1;i<=m;i++) k=i,build_(1,1,dfn);for(int i=1;i<=n;i++) nowi[i]=i;for(int i=1;i<=q;i++){int x=nowi[b[i].a],y=b[i].b;if(b[i].k==1) nowi[y]=fa[nowi[y]];if(b[i].k==2) k=y,lx=id[x],rx=lx+siz[x]-1,printf("%d\n",query(1,1,dfn));if(b[i].k==3) k=b[i].b,loc=id[b[i].a],c=b[i].c,upd(1,1,dfn);}return 0;
}

BZOJ3443: 装备合成相关推荐

  1. dota攻略(dota全部英雄装备合成和英雄打法)

    收集整理到行业知识网关于dota全部英雄装备合成和英雄打法的所有攻略,希望给菜鸟一些提示和帮助 dota召唤师装备攻略  dota黑暗贤者装备攻略  dota不朽尸王装备攻略  dota深渊领主装备攻 ...

  2. 从装备合成谈树状结构的应用

    源码下载: 链接: https://pan.baidu.com/s/1DucpIik596W1pkY09FjUew 提取码: n8mq 其中有个文件"类的功能介绍.txt",介绍了 ...

  3. 【三分/贪心/数学】装备合成

    [三分/贪心]装备合成 题目 题目链接 思路 设方案一A次,方案二B次 2 A + 4 B < = X 2A+4B<=X 2A+4B<=X 3 A + B < = Y 3A+B ...

  4. 设计模式7:开源, 游戏装备合成

    一个仿王者荣耀的装备合成系统,运行效果: 最关键的是这两个数组: public static int conditionAr[][]=new int[][]{         {80,-1,-1,-1 ...

  5. BZOJ 3443: 装备合成

    orz噶爷 (就是那个叫wohenshuai的大佬) 好劲啊------. 每次装备合成新建一个点 连向两个子节点 可以知道每次询问就询问这个点的子树 每次合并每个点就跳到它合并的点 代表以后要询问这 ...

  6. 软件项目管理3:开源,装备合成功能的多种方案

    基于原有的飞机大战,用树状结构完成装备的合成,绘制合成路径.功能还可以再改进. 比如:设计模式的组合模式. 用抽象组件.复合节点.叶子节点,表示装备关系. 1. 表示装备的节点关系 2. 判断当前物品 ...

  7. 3.19装备合成(三分)

    第19节 装备合成 牛牛有件材料和件材料,用件材料和件材料可以合成一件装备,用件材料和件材料也可以合成一件装备.牛牛想要最大化合成的装备的数量,于是牛牛找来了你帮忙. 输入描述: 输入包含组数据 第一 ...

  8. hp laser103 属性没有配置项_冰雪传奇:起源之上还有装备吗?详解鸿蒙装备合成与属性...

    起源装备之上还有装备吗?不少玩家还有这个疑惑.鸿蒙地图又是什么?今天就和小编看看起源之上的鸿蒙装备吧. 鸿蒙装备没有成品和主副印碎片一样需要10个同样的碎片才可以合成一个成品,而想爆鸿蒙碎片需要到特定 ...

  9. 新超越极限地图和隐藏口令及装备合成公式

    完整版见https://jadyer.github.io/2013/09/08/xcyjx/ 新超越极限地形图 新超越极限装备位置图 /*** ============================ ...

最新文章

  1. Linux命令缩写来由
  2. c++精确到小数点后两位_高考试卷的小数点是怎么算入总分的?
  3. VirtualAPK:滴滴 Android 插件化的实践之路
  4. MySQL授权用户及密码恢复设置
  5. python机制_python 加载模块机制
  6. .Netcore 2.0 Ocelot Api网关教程(番外篇)- Ocelot v13.x升级
  7. ffplay分析(从启动到读取数据线程插入到字幕、音频、视频解码前的队列操作)
  8. Flask的csrf_token的用法
  9. git bash使用笔记
  10. 正则表达式 以字符串开头_干货-Shell编程之正则表达式
  11. linux自带mysql启动不_Linux系统自带的MySQL 数据库启动问题
  12. CentOS6.5+mysql5.1源码安装过程
  13. SQL语句详解(五)——SQL字段修饰符
  14. css 里层元素撑不开外层元素
  15. GNS3专用 Cisco IOS下载
  16. Java实现百度富文本编辑器UEditor
  17. 在Windows系统中安装Go语言
  18. 苹果笔记本电脑我的计算机在哪里设置密码,Mac小教程:设置苹果Mac电脑的开机密码...
  19. Yolov5如何在训练意外中断后接续训练
  20. 企业微信上传临时素材文件

热门文章

  1. diff和patch
  2. MessageBoxButtons.OKCancel的选择事件
  3. audit审计规则配置方法
  4. C++发送HTTP请求---亲测可行
  5. Python制作gif动图(PIL)
  6. Markdown常用语法知识
  7. Halcon 单相机标定
  8. 芝麻信用分SDK接入,显示芝麻信用授权界面(Android)
  9. 爬虫入门经典(二十四) | 爬取当当网图书信息并进行数据清洗
  10. c#检测网络连接信息