社区讨论

0分代码求调

P10879 「KDOI-07」对树链剖分的爱参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lzvj60bu
此快照首次捕获于
2024/08/16 01:04
2 年前
此快照最后确认于
2024/08/16 10:12
2 年前
查看原帖
大佬们好,本蒟蒻和题解的思路差不多,概率期望DP,比赛的时候过样例了,结果只A了两个点,爆零了,检查了long long和取模,应该没啥问题``` #include<bits/stdc++.h> using namespace std; #define ll long long const int mn=5000,p=998244353;
int n,Q;//,l[mn+3],r[mn+3]; ll Pow(ll a,ll b) { a%=p; ll ans=1%p; while(b>0) { if(b&1) ans=ansa%p; a=aa%p; b>>=1; } return ans; } ll rev[mn+3]; ll dp[mn+3][mn+3],Sdp[mn+3][mn+3]; //i是j祖先的概率和前缀和 ll ans[mn+3];
int main() { #ifndef ONLINE_JUDGE freopen("Tree.in","r",stdin); #endif cin>>n; //for(int i=2;i<=n;i++) // scanf("%d%d",l+i,r+i); for(int i=1;i<=n;i++) rev[i]=Pow(i,p-2);
CPP
for(int i=1;i<=n;i++) dp[i][i]=Sdp[i][i]=1;
for(int i=2;i<=n;i++) {
    int l,r;
    scanf("%d%d",&l,&r);
    for(int u=1;u<i;u++) {
        //u是l到r祖先的概率加起来
        dp[u][i]=(Sdp[u][r]-Sdp[u][l-1])
                 *rev[r-l+1]%p;
        Sdp[u][i]=(Sdp[u][i-1]+dp[u][i])%p;
    }
}
//cout<<dp[2][3];

cin>>Q;
while(Q--) {
    int u,v,val;
    scanf("%d%d%d",&u,&v,&val);
    if(u>v) swap(u,v);
    for(int i=1;i<=u;i++) {
        ll P=dp[i][v]-dp[i][u]*dp[u][v]%p;
//dp[i][v]=u为v祖先且i为v祖先的概率(此时等价于i为u祖先)
//+u不为v祖先且i为v祖先的概率
CPP
        ans[i]+=(dp[i][u]+dp[i][v]-
                 2*dp[i][u]*((dp[u][v]+P)%p)%p)
                *val%p;//容斥
        ans[i]%=p;
    }
    for(int i=u+1;i<=v;i++) 
        ans[i]+=dp[i][v]*val%p,ans[i]%=p;
}
for(int i=2;i<=n;i++) cout<<(ans[i]%p+p)%p<<" ";
return 0;
}
CPP

回复

3 条回复,欢迎继续交流。

正在加载回复...