#C220816B. 小凯的疑惑
#C220816B. 小凯的疑惑
C220816B (校内模拟赛)
背景
注意:本题采用捆绑测试。
题目描述
小凯正在玩一个寻宝游戏。总共有
小凯想获得最大总价,但他非常疑惑。因此他请你帮忙求出价值最大的选择方案的价值
输入格式
第一行输入一个正整数
接下来共
输出格式
输出共一行, 输出最大价值
样例
输入数据 1
5
3 2 4 5 4
1 2
2 3
3 4
3 5
输出数据 1
60
样例1说明
选 1、4、5 号地点最优。
数据规模与约定
subtask1(20pts) :
subtask2(20pts) :保证最终答案在取模之前
subtask3(20pts) :保证为藏宝地点的结构为一条链。
subtask4(40pts) :无特殊限制。
对于 100% 的数据,
Solution
按照每个 subtask 进行讨论。
Subtask1
这部分应该是给爆搜的,就不再提了。
Subtask2
取模之前
设
最后答案为
Subtask3
这一部分的数据是树退化成为了链,也就是将原问题变成了序列上的问题(我没想明白为什么设置这个 subtask,如果没有推出正解这部分的分应该也是不可做的才对啊)。
Subtask4
继续 Subtask2 的思路,如果在转移的时候进行取模,会出现转移
Code
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof a)
#define int __int128
using namespace std;
void read(auto &k)
{
k=0;auto flag=1;char b=getchar();
while (!isdigit(b)) {flag=(b=='-')?-1:1;b=getchar();}
while (isdigit(b)) {k=k*10+b-48;b=getchar();}
k*=flag;
}
void write(auto x) {if (x<0) {putchar('-');write(-x);return;}if (x>9) write(x/10);putchar(x%10+'0');}
void writewith(auto x,char c) {write(x);putchar(c);}
const int _SIZE=2e5,mod=998244353;
int n;
int v[_SIZE+5],f[_SIZE+5][2];
long double ff[_SIZE+5][2],vv[_SIZE+5];
struct EDGE{
int nxt,to;
}edge[(_SIZE<<1)+5];
int tot,head[_SIZE+5];
void AddEdge(int x,int y)
{
++tot;
edge[tot].nxt=head[x];
edge[tot].to=y;
head[x]=tot;
}
void dfs(int x,int fa)
{
ff[x][0]=0,ff[x][1]=vv[x];//ff用于存储答案的ln形式
f[x][0]=1,f[x][1]=v[x];//f还是用来记录答案取模后的结果
for (int i=head[x];i;i=edge[i].nxt)
{
int twd=edge[i].to;
if (twd==fa) continue;
dfs(twd,x);
if (ff[twd][0]<ff[twd][1]) //ff只用来判断应该从哪里转移,不作为真实答案的记录,真实答案仍然记录在f中
ff[x][0]+=ff[twd][1],f[x][0]=(f[x][0]*f[twd][1])%mod;//ln形式下乘法变为加法,值域绝对不会爆
else
ff[x][0]+=ff[twd][0],f[x][0]=(f[x][0]*f[twd][0])%mod;
ff[x][1]+=ff[twd][0];
f[x][1]=(f[x][1]*f[twd][0])%mod;
}
}
signed main()
{
read(n);
for (int i=1;i<=n;i++) read(v[i]),vv[i]=logl(v[i]);//取ln
for (int i=1;i<n;i++)
{
int u,v;read(u),read(v);
AddEdge(u,v),AddEdge(v,u);
}
dfs(1,0);
if (ff[1][0]<ff[1][1]) writewith(f[1][1],'\n');
else writewith(f[1][0],'\n');
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步