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


推荐阅读
  • 本文探讨了如何在模运算下高效计算组合数C(n, m),并详细介绍了乘法逆元的应用。通过扩展欧几里得算法求解乘法逆元,从而实现除法取余的计算。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 探索1000以内的完美数:因数和等于自身
    本文探讨了如何在1000以内找到所有完美数,即一个数的因数(不包括自身)之和等于该数本身。例如,6是一个完美数,因为1 + 2 + 3 = 6。通过编程实现这一过程,可以更好地理解完美数的特性。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
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社区 版权所有