20221013模拟赛题解

改题比赛

A-record

先将原图按颜色划分成多个大小至少为 2 的连通块,不难发现每个连通块内的颜色永远一样,然后对于每个连通块向外 bfs 扩展,每个点第一次被扩展到后颜色就会开始变化。所以记录一下每个点什么时候被扩展到以及它会跟随哪个连通块,然后询问时判一下时间和奇偶性即可。

B-jewelry

分析

发现 n 很大,而 ci 很小,于是可以开个桶存每个 c 对应的 v 的集合。此时很显然可以设 dpi,j 表示枚举到售价为 1i,花了 j 元的最大吸引力,转移方程就呼之欲出了:

dpi,j=max{dpi1,jki+cal(i,k)}

,其中 cal(i,k) 表示售价为 i 的前 k 大吸引力之和。此时暴力 dp 的复杂度是 O(n2),能获得 20pts 的好成绩。

考虑优化,发现其贡献函数的增长率随 i 增大而而减小,即其二阶导恒为非正,且题目中求的是最大值,因此其满足决策单调性。

因此可以使用分治或二分队列等常见做法优化到 O(mwlogm)

C-impression

分析

首先发现一个显然的结论,把树分成若干份权值和相等的连通块要么没有方案要么只有 1 种方案。

然后发现每块权值分 k 时,一个节点 u 能和其父节点断开的必要条件是 k|su。于是可以设

fi=u=1n[Si|su]

,其中 su 表示以 u 为根的子树大小。

考虑如何计算 fi,发现若 fi 里算进去了 u,设 t=Si 则必有

t|susu=xt (xN)t=SiS=ti

,于是有

t|gcd(si,S)Si|gcd(si,S)Sgcd(si,S)|i

,于是每次枚举倍数即可。这部分的复杂度相当于是 i=1nd(i)nlnn

发现树能合法地分成 i 份当且仅当 fi=i,举几个例子能容易发现。

再考虑整体的答案,设 dpi 表示最后一次分成 k 份的方案数,发现每次分的份数一定是上一次的倍数,于是转移还是个 nlnn,转移方程为:

dpi=[fi=i]i|tdpt

,最后输出 dpi 求和即可。

核心代码

int n,a[MAXN],f[MAXN],dp[MAXN],s[MAXN],ans;vector<int>d[MAXN],tr[MAXN];
void dfs(int u,int fa){
    s[u]=a[u];for(auto v:tr[u]) if(v!=fa) dfs(v,u),s[u]+=s[v];
}int gcd(int x,int y){return y?gcd(y,x%y):x;}
signed main(){
    qread(n);int i,j;for(i=1;i<=n;i++) qread(a[i]);
    for(i=2;i<=n;i++){
        int p;qread(p);
        tr[i].push_back(p);tr[p].push_back(i);
    }dfs(1,0);dp[1]=1;int v;
    for(i=1;i<=n;i++) if((v=(s[1]/gcd(s[i],s[1])))<=n) f[v]++;
    for(i=n;i>=1;i--) for(j=i+i;j<=n;j+=i) f[j]+=f[i];
    for(i=1;i<=n;i++) f[i]=(f[i]==i);
    for(i=1;i<=n;i++){
        if(!f[i]) continue;
        for(j=i+i;j<=n;j+=i) (dp[j]+=dp[i])%=mod;(ans+=dp[i])%=mod;
    }printf("%lld\n",ans);
    return 0;
}

D-graph

大分讨。一下点的度数若无特殊说明均为模 3 以后的结果。

  • 如果有入度为 0 的点那么只保留它即可。

  • 如果有两个入度为 1 的点且他们的路径上只有入度为 2 的点那么就保留这两个点的路径上的点即可,可以证明如果图中有至少 2 个入度为 1 的点就一定会存在如上路径。

  • 如果有仅由入度为 2 的点构成的环就保留这个环即可。

  • 剩下的情况就是只有 1 个入度为 1 的点和一个由入度为 2 的点构成的森林。首先,这个入度为 1 的点必然存在,要不然叶子结点的度数不可能是 2。其次,森林至少有 2 棵树。因为一棵树对度数为 1 的点的贡献为 2。所以考虑找 2 颗树并分别保留 2 个叶子结点和路径以及这个入度为 1 的节点。

特判一下保留下来的点是整个图的情况。

Ex-math

分析

首先发现当取到 x=y=1 时,b=1+1+a1=a+2,所以有 bmaxa+2

另一方面,设 b 是一个满足条件的正整数,设 (x,y) 是所有满足原式的正整数对中使得 x+y 最小的一对。

x=y,则 b=2x2+ax2=2+ax22+a

xy,不妨设 x>y,此时原式可以变形成关于 x 的一元二次方程

x2+byx+y2+a=0

,设其另外一个实数解为 x,由韦达定理可知 x=byxZ,又因为 xx=y2+a,即 x=y2+1x >0,所以 x 为正整数,此时,(x,y) 也是满足原式的正整数对,因此

x+y=y2+ax+yx+y

,于是有 x2y2+a,且 xy+1,于是有

b=x2+y2+axy2(y2+a)xy2(y2+a)y(y+1)=2y2y2+y+2ay(y+1)<2+a

,所以 bmax2+a

本文作者:l_x_y

本文链接:https://www.cnblogs.com/lxy-2022/p/mo-ni-sai-ti-jie.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   l_x_y  阅读(67)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开