热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CF487ETourists圆方树套路题

CF487ETourists题目很套路,现将利用点双建成圆方树,对于每一个点双的方点用于存周边圆点的min,方点需要用multiset维

CF487E Tourists

题目很套路,现将利用点双建成圆方树,对于每一个点双的方点用于存周边圆点的min,方点需要用multiset维护圆点儿子的值,当然也需要每个点维护自己的权值。

建树完成后基本就是树剖的板子了,需要注意的是如果找到最后一点一个点事方点的话,需要将方点的父亲进行统计


#include
#define inf 0x7fffffff
#define ll long long
//#define int long long
//#define double long double
#define re register int
#define void inline void
#define eps 1e-9
//#define mod 1e9+7
//#define ls(p) p<<1
//#define rs(p) p<<1|1
//#define pi acos(-1.0)
#define pb push_back
#define P pair < int , int >
#define mk make_pair
#define fi first
#define se second
#define unordered_map map
#define __int128 long long
#define x0 xx0
#define y0 yy0
using namespace std;
const int mod&#61;1e9&#43;7;
const int N&#61;8e5&#43;5;
int n,m,q,all;
multiset < int > SM[N];
int w[N];
namespace SEG
{#define ls(p) p<<1#define rs(p) p<<1|1int sum[N],a[N];void push(int p){sum[p]&#61;min(sum[ls(p)],sum[rs(p)]);}void bulid(int p,int l,int r){if(l&#61;&#61;r){sum[p]&#61;a[l];return;}int mid&#61;(l&#43;r)>>1;bulid(ls(p),l,mid);bulid(rs(p),mid&#43;1,r);push(p);}void update(int p,int l,int r,int pos,int val){if(l&#61;&#61;r){sum[p]&#61;val;return;}int mid&#61;(l&#43;r)>>1;if(pos<&#61;mid) update(ls(p),l,mid,pos,val);else update(rs(p),mid&#43;1,r,pos,val);push(p);}int ask(int p,int l,int r,int L,int R){if(L<&#61;l&&r<&#61;R) return sum[p];int mid&#61;(l&#43;r)>>1;int ans&#61;1e9;if(L<&#61;mid) ans&#61;min(ans,ask(ls(p),l,mid,L,R));if(mid<R) ans&#61;min(ans,ask(rs(p),mid&#43;1,r,L,R));return ans;}#undef ls#undef rs
}
namespace GP2
{struct node{int ver,next;}e[N];int tot&#61;1,head[N];int d[N],top[N],dfn[N],sz[N],son[N],fa[N];int num;void add(int x,int y){e[&#43;&#43;tot].ver&#61;y;e[tot].next&#61;head[x];head[x]&#61;tot;}void addedge(int x,int y){add(x,y);add(y,x);}void dfs1(int x,int pre){int ma&#61;-1;sz[x]&#61;1;d[x]&#61;d[pre]&#43;1;fa[x]&#61;pre;for(re i&#61;head[x];i;i&#61;e[i].next){int y&#61;e[i].ver;if(y&#61;&#61;pre) continue;dfs1(y,x);sz[x]&#43;&#61;sz[y];if(sz[y]>ma) son[x]&#61;y,ma&#61;sz[y];}}void dfs2(int x,int pre){dfn[x]&#61;&#43;&#43;num;top[x]&#61;pre;if(!son[x]) return;dfs2(son[x],pre);for(re i&#61;head[x];i;i&#61;e[i].next){int y&#61;e[i].ver;if(y&#61;&#61;son[x]||y&#61;&#61;fa[x]) continue;dfs2(y,y);}}void init(){dfs1(1,0);dfs2(1,1);for(re i&#61;1;i<&#61;n;i&#43;&#43;) SEG::a[dfn[i]]&#61;w[i];for(int i&#61;n&#43;1;i<&#61;all;i&#43;&#43;){for(int j&#61;head[i];j;j&#61;e[j].next){int y&#61;e[j].ver;if (y!&#61;fa[i]) SM[i].insert(w[y]);}if(SM[i].empty()) w[i]&#61;1e9;else w[i]&#61;*SM[i].begin();SEG::a[dfn[i]]&#61;w[i];}SEG::bulid(1,1,all);}void add1(int x,int num){int f&#61;fa[x];if(f){SM[f].erase(SM[f].find(w[x]));SM[f].insert(num);w[f]&#61;*SM[f].begin();SEG::update(1,1,all,dfn[f],w[f]);}w[x]&#61;num;SEG::update(1,1,all,dfn[x],num);}int ask(int x,int y){int ans&#61;1e9;while(top[x]!&#61;top[y]){if(d[top[x]]<d[top[y]]) swap(x,y);ans&#61;min(ans,SEG::ask(1,1,all,dfn[top[x]],dfn[x]));x&#61;fa[top[x]];}if(d[x]>d[y]) swap(x,y);ans&#61;min(ans,SEG::ask(1,1,all,dfn[x],dfn[y]));if(x>n) ans&#61;min(ans,w[fa[x]]);// return ans;}
}
namespace GP1
{struct node{int ver,next;}e[N];int tot&#61;1,head[N];int dfn[N],low[N];int num,instack[N],top,sum;void add(int x,int y){e[&#43;&#43;tot].ver&#61;y;e[tot].next&#61;head[x];head[x]&#61;tot;}void addedge(int x,int y){add(x,y);add(y,x);}void tarjan(int x,int in_edge){dfn[x]&#61;low[x]&#61;&#43;&#43;sum;instack[&#43;&#43;top]&#61;x;
// cout<for(re i&#61;head[x];i;i&#61;e[i].next){int y&#61;e[i].ver;if(!dfn[y]){tarjan(y,i);low[x]&#61;min(low[x],low[y]);if(low[y]>&#61;dfn[x]){all&#43;&#43;;w[all]&#61;1e9;int z;do{z&#61;instack[top--];GP2::addedge(z,all);}while(z!&#61;y);GP2::addedge(x,all);w[all]&#61;min(w[all],w[x]);}}else if(i!&#61;(in_edge^1)) low[x]&#61;min(low[x],dfn[y]);}}
}
void solve()
{cin>>n>>m>>q;all&#61;n;for(re i&#61;1;i<&#61;n;i&#43;&#43;) scanf("%d",&w[i]);for(re i&#61;1;i<&#61;m;i&#43;&#43;){int x,y;scanf("%d%d",&x,&y);GP1::addedge(x,y);}GP1::tarjan(1,0);GP2::init();while(q--){char op[5];int x,y;scanf("%s%d%d",op,&x,&y);if(op[0]&#61;&#61;&#39;C&#39;) GP2::add1(x,y);else printf("%d\n",GP2::ask(x,y));}
}
signed main()
{
// fflush(stdout);
// srand(102321547);
// freopen("9.in.txt", "r", stdin);
// freopen("9.out.txt", "w", stdout);
// freopen("9.out", "w", stdout);int T&#61;1;
// cin>>T;for(int index&#61;1;index<&#61;T;index&#43;&#43;){
// printf("Case %d: ",index);solve();
// puts("");}return 0;
}
/*
7 9 1
1
2
3
4
5
6
7
1 2
2 5
1 5
2 3
3 4
2 4
5 6
6 7
5 7
A 6 7*/


推荐阅读
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文详细介绍了8051系列微控制器的中断系统,特别是C51编译器中interrupt和using关键字的作用及其使用方法。通过深入分析这两个关键字的功能,帮助开发者更好地理解和优化中断程序的设计。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 本文探讨了符号三角形问题,该问题涉及由相同数量的“+”和“-”符号组成的三角形。通过递归回溯法,可以有效地搜索并计算符合条件的符号三角形的数量。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 探讨 HDU 1536 题目,即 S-Nim 游戏的博弈策略。通过 SG 函数分析游戏胜负的关键,并介绍如何编程实现解决方案。 ... [详细]
  • 本文介绍两道有趣的编程问题:一是寻找给定数字n的连续数字序列及其个数,二是模拟一个翻杯子的游戏。同时附带一道智商题供读者思考。 ... [详细]
author-avatar
摇身一变鄙人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有