社区讨论
50分MLE求助
P5619[DBOI2019] 持矢参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi75crmq
- 此快照首次捕获于
- 2025/11/20 16:05 4 个月前
- 此快照最后确认于
- 2025/11/20 23:59 4 个月前
Subtask 2 都只用了十几 MB,我实在想不到怎么会卡空间
CPP#include<bits/stdc++.h>
#define ll long long
#define MOD 19260817
using namespace std;
inline ll ksm(ll x, ll y, ll ksmmod = MOD)
{
x %= ksmmod;
y %= ksmmod - 1;
ll now=1;
while(y)
{
if(y&1)
{
now = now * x % ksmmod;
}
x = x * x % ksmmod;
y >>= 1;
}
return now % ksmmod;
}
inline ll read()
{
ll s=0,t=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')t*=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
s=(s<<1)+(s<<3)+c-'0';
c=getchar();
}
return s*t;
}
void work();
int main()
{
ll T=1;
while(T--)
{
work();
}
}
int n,m;
int siz[2000006];
int dp[2000006];
vector<int>e[2000006];
void f(ll x,ll from)
{
siz[x]=1;
ll res=dp[x];
for(auto to:e[x])
{
if(to==from)continue;
f(to,x);
siz[x]+=siz[to];
res=res*dp[to]%MOD;
}
dp[x]=res;
}
void work()
{
ll ii=ksm(2,19260815,MOD);
n=read();
m=read();
for(ll i=1;i<=n;i++)
{
ll x=read()%MOD;
dp[i]=(x+1)%MOD;
}
for(ll i=1;i<n;i++)
{
ll u=read(),v=read();
e[u].push_back(v);
e[v].push_back(u);
}
f(1,0);
ll answer=0;
ll res1,res2,x;
for(ll i=1;i<=m;i++)
{
x=read();
res1=dp[x],res2=ksm(ii,siz[x],MOD);
answer+=((res1-1+MOD)%MOD*res2)%MOD;
answer%=MOD;
}
printf("%lld\n",answer);
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...