高一上十月上旬日记

news/2024/10/4 6:38:45

10.1

闲话

做题纪要

10.2

闲话

做题纪要

10.3

闲话

做题纪要

luogu P3241 [HNOI2015] 开店

  • 多倍经验: luogu P4211 [LNOI2014] LCA

  • 不难发现两个点在点分树上的 \(\operatorname{LCA}\) 是一个求距离的好的分割点,考虑点分树。

  • 暂且不考虑 \([l,r]\) 的限制,因为只是一个限制范围的查找。

  • \(siz_{x}\) 表示点分树上以 \(x\) 为根的子树大小, \(sum_{0/1,x}\) 表示点分数上以 \(x\) 为根的子树内的所有节点到 \(x\) / \(x\) 在点分树上的父亲节点的距离和。

  • 设当前开店节点为 \(x\) ,在点分树上跳到了 \(rt\)

  • 仍考虑枚举 \(\operatorname{LCA}\) ,除去 \(rt\) 方向上的贡献,此时对答案产生的贡献为 \(sum_{0,fa_{rt}}-sum_{1,rt}+(siz_{fa_{rt}}-siz_{rt}) \times dis_{x,fa_{rt}}\)

  • 对于年龄 \(\in [l,r]\) 的限制,套一个支持单点插入、区间查询的数据结构即可。

  • 离散化后使用动态开点线段树貌似空间还是会爆炸,又因为没有修改操作,所以使用 vector 代替即可。具体地,原区间查询距离和转化为二分端点后的两个前缀和相减,原查询大小和转化为二分端点后两个端点相减。

    点击查看代码
    struct node
    {ll nxt,to,w;
    }e[300010];
    ll head[300010],a[300010],b[300010],ask,cnt=0;
    void add(ll u,ll v,ll w)
    {cnt++;e[cnt].nxt=head[u];e[cnt].to=v;e[cnt].w=w;head[u]=cnt;
    }
    struct LCA
    {ll siz[300010],fa[300010],dep[300010],son[300010],top[300010],dis[300010];void init(){dfs1(1,0);dfs2(1,1);}void dfs1(ll x,ll father){siz[x]=1;fa[x]=father;dep[x]=dep[father]+1;for(ll i=head[x];i!=0;i=e[i].nxt){if(e[i].to!=father){dis[e[i].to]=dis[x]+e[i].w;dfs1(e[i].to,x);siz[x]+=siz[e[i].to];son[x]=(siz[e[i].to]>siz[son[x]])?e[i].to:son[x];}}}void dfs2(ll x,ll id){top[x]=id;if(son[x]!=0){dfs2(son[x],id);for(ll i=head[x];i!=0;i=e[i].nxt){if(e[i].to!=fa[x]&&e[i].to!=son[x]){dfs2(e[i].to,e[i].to);}}}}ll lca(ll u,ll v){while(top[u]!=top[v]){if(dep[top[u]]>dep[top[v]]){u=fa[top[u]];}else{v=fa[top[v]];}}return (dep[u]<dep[v])?u:v;}ll get_dis(ll x,ll y){return dis[x]+dis[y]-2*dis[lca(x,y)];}
    }L;
    struct SMT
    {struct quality{ll val,sum;bool operator < (const quality &another) const{return val<another.val;}};vector<quality>e[300010];void update(ll x,ll val,ll sum){e[x].push_back((quality){val,sum});}void init(ll n){for(ll i=1;i<=n;i++){sort(e[i].begin(),e[i].end());for(ll j=1;j<e[i].size();j++){e[i][j].sum+=e[i][j-1].sum;}}}ll query_sum(ll x,ll l,ll r){l=lower_bound(e[x].begin(),e[x].end(),(quality){l,0})-e[x].begin();r=upper_bound(e[x].begin(),e[x].end(),(quality){r,0})-e[x].begin()-1;ll ans=0;if(0<=r&&r<e[x].size()){ans+=e[x][r].sum;}if(0<=l-1&&l-1<e[x].size()){ans-=e[x][l-1].sum;}return ans;}ll query_siz(ll x,ll l,ll r){l=lower_bound(e[x].begin(),e[x].end(),(quality){l,0})-e[x].begin();r=upper_bound(e[x].begin(),e[x].end(),(quality){r,0})-e[x].begin()-1;return r-(l-1);}
    }T[2];
    struct Divide_On_Tree
    {ll siz[300010],weight[300010],vis[300010],fa[300010],center=0;void init(ll n){center=0;get_center(1,0,n);get_siz(center,0);build(center);}	void get_center(ll x,ll fa,ll n){siz[x]=1;weight[x]=0;for(ll i=head[x];i!=0;i=e[i].nxt){if(e[i].to!=fa&&vis[e[i].to]==0){get_center(e[i].to,x,n);siz[x]+=siz[e[i].to];weight[x]=max(weight[x],siz[e[i].to]);}}weight[x]=max(weight[x],n-siz[x]);if(weight[x]<=n/2){center=x;}}void get_siz(ll x,ll fa){siz[x]=1;for(ll i=head[x];i!=0;i=e[i].nxt){if(e[i].to!=fa&&vis[e[i].to]==0){get_siz(e[i].to,x);siz[x]+=siz[e[i].to];}}}void build(ll x){vis[x]=1;for(ll i=head[x];i!=0;i=e[i].nxt){if(vis[e[i].to]==0){center=0;get_center(e[i].to,x,siz[e[i].to]);get_siz(center,0);fa[center]=x;build(center);}}}void update(ll x,ll mod){T[0].update(x,a[x],0);for(ll rt=x;fa[rt]!=0;rt=fa[rt]){T[0].update(fa[rt],a[x],L.get_dis(fa[rt],x));T[1].update(rt,a[x],L.get_dis(fa[rt],x));}}ll query(ll x,ll l,ll r,ll mod){ll ans=T[0].query_sum(x,l,r);for(ll rt=x;fa[rt]!=0;rt=fa[rt]){ans+=T[0].query_sum(fa[rt],l,r)-T[1].query_sum(rt,l,r);ans+=(T[0].query_siz(fa[rt],l,r)-T[0].query_siz(rt,l,r))*L.get_dis(fa[rt],x);}return ans;}
    }D;
    int main()
    {ll n,m,mod,u,v,w,x,l,r,ans=0,i;cin>>n>>m>>mod;for(i=1;i<=n;i++){cin>>a[i];}for(i=1;i<=n-1;i++){cin>>u>>v>>w;add(u,v,w);add(v,u,w);}L.init();D.init(n);for(i=1;i<=n;i++){D.update(i,mod);}T[0].init(n);T[1].init(n);for(i=1;i<=m;i++){cin>>x>>l>>r;l=(l+ans)%mod;r=(r+ans)%mod;if(l>r){swap(l,r);}ans=D.query(x,l,r,mod);cout<<ans<<endl;}return 0;
    }
    

10.4

闲话

做题纪要

luogu P3345 [ZJOI2015] 幻想乡战略游戏

luogu P5311 [Ynoi2011] 成都七中

[ABC373F] Knapsack with Diminishing Values

  • 暴力
    • 分组背包写个常数小点的加手动开 \(O3\) 就过了(赛时直接把火车头粘上了),算下来 \(AT\) 神机能跑 \(1e10\)

      点击查看代码
      #include<bits/stdc++.h>
      #pragma GCC optimize(3)
      #pragma GCC target("avx")
      #pragma GCC optimize("Ofast")
      #pragma GCC optimize("inline")
      #pragma GCC optimize("-fgcse")
      #pragma GCC optimize("-fgcse-lm")
      #pragma GCC optimize("-fipa-sra")
      #pragma GCC optimize("-ftree-pre")
      #pragma GCC optimize("-ftree-vrp")
      #pragma GCC optimize("-fpeephole2")
      #pragma GCC optimize("-ffast-math")
      #pragma GCC optimize("-fsched-spec")
      #pragma GCC optimize("unroll-loops")
      #pragma GCC optimize("-falign-jumps")
      #pragma GCC optimize("-falign-loops")
      #pragma GCC optimize("-falign-labels")
      #pragma GCC optimize("-fdevirtualize")
      #pragma GCC optimize("-fcaller-saves")
      #pragma GCC optimize("-fcrossjumping")
      #pragma GCC optimize("-fthread-jumps")
      #pragma GCC optimize("-funroll-loops")
      #pragma GCC optimize("-fwhole-program")
      #pragma GCC optimize("-freorder-blocks")
      #pragma GCC optimize("-fschedule-insns")
      #pragma GCC optimize("inline-functions")
      #pragma GCC optimize("-ftree-tail-merge")
      #pragma GCC optimize("-fschedule-insns2")
      #pragma GCC optimize("-fstrict-aliasing")
      #pragma GCC optimize("-fstrict-overflow")
      #pragma GCC optimize("-falign-functions")
      #pragma GCC optimize("-fcse-skip-blocks")
      #pragma GCC optimize("-fcse-follow-jumps")
      #pragma GCC optimize("-fsched-interblock")
      #pragma GCC optimize("-fpartial-inlining")
      #pragma GCC optimize("no-stack-protector")
      #pragma GCC optimize("-freorder-functions")
      #pragma GCC optimize("-findirect-inlining")
      #pragma GCC optimize("-fhoist-adjacent-loads")
      #pragma GCC optimize("-frerun-cse-after-loop")
      #pragma GCC optimize("inline-small-functions")
      #pragma GCC optimize("-finline-small-functions")
      #pragma GCC optimize("-ftree-switch-conversion")
      #pragma GCC optimize("-foptimize-sibling-calls")
      #pragma GCC optimize("-fexpensive-optimizations")
      #pragma GCC optimize("-funsafe-loop-optimizations")
      #pragma GCC optimize("inline-functions-called-once")
      #pragma GCC optimize("-fdelete-null-pointer-checks")
      using namespace std;
      #define ll long long 
      #define ull unsigned long long
      #define sort stable_sort 
      #define endl '\n'
      ll w[3010],v[3010],f[2][3010];
      int main()
      {ll n,m,ans=0,i,j,k;cin>>n>>m;for(i=1;i<=n;i++){cin>>w[i]>>v[i];}for(i=1;i<=n;i++){for(j=1;j<=m;j++){f[i&1][j]=f[(i-1)&1][j];}for(k=1;k*w[i]<=m;k++){for(j=k*w[i];j<=m;j++){f[i&1][j]=max(f[i&1][j],f[(i-1)&1][j-k*w[i]]+k*v[i]-k*k);}}}for(i=1;i<=m;i++){ans=max(ans,f[n&1][i]);}cout<<ans<<endl;return 0;
      }
      

[ABC366G] XOR Neighbors

CF341D Iahub and Xors

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/67560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Echoism

Echoing reality Are your memories of me? Floating through a state, half asleep, never awake(never awake) I wont breathe in eternity Carrying your secrets feeling close to who you are Youre just beyond my reach A passing breeze, And your final moments se…

快乐数学1培养数学直觉

1 培养数学直觉我们最初接触一个概念时,会形成我们的直觉。而我们的直觉会影响我们对一门学科的喜爱程度。什么意思呢? 假设我们想给 “猫 ”下一个定义:古代的定义: 一种毛茸茸的动物,有爪子、牙齿、尾巴和四条腿,高兴时发出咕噜声,生气时发出嘶嘶声。 进化定义: 某一…

SciTech-Mathmatics-Markdown:List 嵌入 code block + LaTex: 论文写作、排版与使用 + 数学公式的输入方式

民主与共和 更好的共和度保障更高级的民主, 是因为 民主 与 共和 是统一的。 平衡态的“跃迁”是需要“吸收足够能量”, "改变"总是需要"成本"的。 在正确的方向上,每一天的学习是“质变飞跃”的必要。Markdown: List 嵌入 code block Code is possible …

简单讲讲上下界网络流

无源汇可行流 无源汇网络流一般不讨论最大流,因为它的流都是环流,分布在各个位置,一是不好统计,二是一般也没有意义。所以一般建图只需要求是否有可行解(但我也没遇到过求输出YES和NO的可行流题目,网上的博客也都只当做有源汇的前置知识讲了) 废话不多说,直接上图。第一…

Netflix 錯誤 NW-8-18

环境 PS5的奈飞,OpenWrt的树莓派做软路由解决方案 首先重置,如果不行,关机拔掉电源线等待三分钟,重试 Netflix。如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~

Python算法学习

算法学习心得,源码均为Python实现目录绪论数据结构算法算法的特征算法的评价算法的时间复杂度算法的空间复杂度递归汉诺塔问题(递归调用)查找排序二分查找检查排序是否完成冒泡排序选择排序插入排序希尔排序(高级版插入排序)快速排序堆排序(二叉树)python中内置好的堆排…

数学建模学习

数学建模学习,包含各种常用模型和Matlab源码目录 目录目录评价类方法层次分析法搜索引擎算法步骤算法代码F4锁定单元格优劣解距离法算法步骤算法代码自输入权重代码基于熵权法权重的代码灰色关联分析传统数理统计的不足之处该方法的好处算法步骤算法代码基于灰色关联度权重的代…

下载、安装、配置 android-studio-2021.1.1.22-windows

软件安装包:图1 软件安装包提示删除已经存在的版本:图2 提示删除已经存在的版本根据提示选择是:图3 根据提示选择是继续安装:图4图5图6图7图8图9图10