首页 > 其他分享 >1.11模拟赛 T2题解

1.11模拟赛 T2题解

时间:2024-01-11 14:33:55浏览次数:33  
标签:return 1.11 int 题解 T2 x% dep ans mod

简要题意

每个点有一定概率向前面的点连边,求两点之间距离的期望

思路

推柿子

image

code

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 1000005
int n,m,u,v;
const int mod=1e9+7;
int a[N],sum[N],c[N],dep[N],s[N],f[N],g[N],h[N];
int ksm(int x,int y){
	int ans=1;
	while(y){
		if(y&1) ans=ans*x%mod;
		x=x*x%mod,y>>=1;
	}
	return ans;
}
int mo(int x){
	return (x%mod+mod)%mod;
}
signed main(){
	freopen("tree.in","r",stdin);
	freopen("tree.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<n;i++) scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i],sum[i]%=mod;
	for(int i=1;i<=n;i++) scanf("%lld",&c[i]);
	dep[1]=0,s[1]=a[1]*c[1]%mod,g[1]=1;
	for(int i=2;i<=n;i++){
		dep[i]=s[i-1]*ksm(sum[i-1],mod-2)%mod+c[i],dep[i]%=mod;
		s[i]=s[i-1]+a[i]*(dep[i]+c[i])%mod,s[i]%=mod;
		f[i]=a[i]*ksm(sum[i],mod-2)%mod;
		g[i]=g[i-1]*(1+mod-f[i]*f[i]%mod)%mod;
		h[i]=h[i-1]+f[i]*f[i]%mod*dep[i]%mod*ksm(g[i],mod-2)%mod,h[i]%=mod;
	}
	while(m--){
		scanf("%lld%lld",&u,&v);
		if(u==v){
			printf("0\n");
			continue;
		}
		if(u>v) swap(u,v);
		printf("%lld\n",mo(dep[u]+dep[v]-2*f[u]*dep[u]%mod-2*g[u-1]%mod*(1+mod-f[u])%mod*h[u-1]%mod));
	}
	return 0;
}

标签:return,1.11,int,题解,T2,x%,dep,ans,mod
From: https://www.cnblogs.com/hubingshan/p/17958518

相关文章

  • P4103 [HEOI2014] 大工程 题解
    题目链接:大工程先考虑只有一次查询,很显然我们可以暴力树上dp处理出答案。对于每个节点而言,有:容易看出类似点分治逐个遍历子树计算前面一堆子树对后面子树的贡献思想,我们可以很容易的知道:对于路径总和,显然多了一段新的贡献,这段贡献为当前关键点和前面点多的一段\(2\)号路......
  • 《算法竞赛》题解---三分
    三分法模板三分法#include<bits/stdc++.h>#defineeps1e-8//或者constdoubleeps=1e-8;--主要是doubleusingnamespacestd;intn;doublea[15],l,r;doublecheck(doublex){ doubleans=0; for(inti=n;i>=0;i--) ans=ans*x+a[i];//秦九韶公式 returnans;}......
  • P4093 [HEOI2016/TJOI2016] 序列 题解
    题目链接:序列对于LIS问题,很显而易见的有dp方程为:\[dp_i=\max{dp_j}+1\(j<i,a_j\lea_i)\text{dp表示以某个位置结尾的最长LIS}\]本题考虑到对于转移的两位置,如果能从\(j\rightarrowi\),那么在以上条件成立的基础情况下,我们由于可以更改二者中的任意一个值(因为同一......
  • 2023 百度之星决赛题解
    T4传信游戏建反向边,从入度为\(0\)的结点开始搜T5喵喵卫士,全靠你了\(\star\)考虑暴力枚举每个点的深度,发现只要知道相邻两层的深度就能用组合数算方案数,自然想到按层DP,把上一层的点数记到状态里赛时做法按深度从小到大DP的话想要记录每个点是否被用过,以保证深度达到上......
  • 关于REACT2024挑战赛
    关于REACT2024首先,挑战赛官网如下:https://sites.google.com/cam.ac.uk/react2024/home这个挑战赛的任务是:建立一个机器学习模型,在双人交互的背景下,通过说话者的视频、音频、表情等数据,生成听者的面部反应并要保证反应的合理性(FRDistandFRCorr)、多样性(FRVar,FRDiv,andFRD......
  • P3203 弹飞绵羊 题解
    QuestionP3203[HNOI2010]弹飞绵羊一条直线上摆着\(n\)个弹簧,每个弹簧有一个弹力系数\(k_i\),当绵羊走到第\(i\)个弹簧时,会被弹到第\(i+k_i\)个弹簧,如果\(i+k_i>n\)则会被弹飞,有两个操作1x查询\(x\)处的绵羊经过几次会被弹飞2xy把\(x\)处的弹力系数改成......
  • P1307题解
    思路1.定义及输入原数/反转后的数intn,cnt=0;//反转后的数一定要归零!cin>>n;2.用while循环反转while(n!=0){//只要n还没有被分解完,就继续分解cnt=cnt*10+n%10;//cnt每次*10再加上分离出的数位(*10为了防0)n/=10;//n减一位}3.输出cout<<cnt;至此,这道题就做完......
  • P5722题解
    说两句哈,等差数列求和公式是\((A_1+A_n)\timesd\over2\),所以其实可以一行代码解决,但是我没高斯聪明,于是我不打算用等差数列求和公式。//(等差数列求和公式)intn;cin>>n;cout<<(1+n)*1/2;思路1.定义及输入截止的数/计数器intn,cnt=0;//计数器必须归零!cin>>n;2.循环......
  • P1085题解
    思路1.定义校内时间/校外时间/最大值(记录不高兴值)/记录星期intn,m,maxx=-1,tmp;2.使用循环输入并判断for(inti=1;i<=7;i++){//循环一周的日期cin>>n>>m;if(n+m>8&&maxx<n+m){//如果津津不高兴了且它比以往的值都大maxx=n+m;//更改最大值tmp=i;......
  • P5718题解
    思路1.定义及输入最小值的变量/输入个数/每个数intn,m,minn=1001;cin>>n;2.循环输入每个数并找最小值while(n--){cin>>m;minn=min(minn,m);}(用for循环也可以)for(inti=1;i<=n;i++){cin>>m;minn=min(minn,m);}3.输出cout<<minn;至此,这道题就做......