热门标签 | 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*/


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 本问题涉及在给定的无向图中寻找一个至少包含三个节点的环,该环上的节点不重复,并且环上所有边的长度之和最小。目标是找到并输出这个最小环的具体方案。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ... [详细]
  • 线段树详解与实现
    本文详细介绍了线段树的基本概念及其在编程竞赛中的应用,并提供了一个具体的线段树实现代码示例。 ... [详细]
  • 编译原理中的语法分析方法探讨
    本文探讨了在编译原理课程中遇到的复杂文法问题,特别是当使用SLR(1)文法时遇到的多重规约与移进冲突。文章讨论了可能的解决策略,包括递归下降解析、运算符优先级解析等,并提供了相关示例。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 本题要求计算一组正整数的最小公倍数(LCM)。输入包括多组测试数据,每组数据首先给出一个正整数n,随后是n个正整数。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 本文详细介绍了如何在循环双链表的指定位置插入新元素的方法,包括必要的步骤和代码示例。 ... [详细]
  • 本文详细介绍了Windows网络编程中常用的几个关键结构体,包括sockaddr_in、in_addr和hostent,解释了它们的定义和用途,并提供了实际应用中的示例。 ... [详细]
  • 本文介绍了如何利用X_CORBA实现远程对象调用,并通过多个示例程序展示了其功能与应用,包括基础的Hello World示例、文件传输工具以及一个完整的聊天系统。 ... [详细]
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
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社区 版权所有