AtCoder Beginner Contest 277 G(概率dp+计数)
admin
2024-02-22 06:02:08
0

\quad题目大意:无向图有n个点m条边,人物初始level为0,初始在1号点,图上点有两种类型点0和1,遇到0会level++,遇到1会收益 += level2level^2level2,求k步内的收益期望(n<=3000,m<=3000)
\quadSolution:
\quad一般期望题先考虑倒推,但是此题终态有点难定义(好像也有倒退做法)。考虑从定义角度入手。
\quad观察一种走法,设w为一种走法线路,f(w)表示走法的收益,f(w)=∑i=1lenXi2f(w) = \sum_{i=1}^{len}X_i^2f(w)=∑i=1len​Xi2​,其中XiX_iXi​表示到i点的等级,而Xi=∑j=1i[cj=0],所以Xi2=∑j=1i∑k=ji[cj=0andck=0]X_i = \sum_{j=1}^i[c_j=0],所以X_i^2=\sum_{j=1}^i\sum_{k=j}^i[c_j=0 \quad and \quad c_k=0]Xi​=∑j=1i​[cj​=0],所以Xi2​=∑j=1i​∑k=ji​[cj​=0andck​=0],c表示点的类型。期望的计算E(w)=f(w)∗∏u=1len−11deg(u)=∑u=1lenXu2∗∏v=1u−11deg(v)=∑u=1len∏v=1u−11deg(v)∗∑j=1u∑k=ju[cj==0&&ck=0]E(w)=f(w)*\prod_{u=1}^{len-1} \frac{1}{deg(u)} = \sum_{u=1}^{len}X_u^2 * \prod_{v=1}^{u-1}\frac{1}{deg(v)} = \sum_{u=1}^{len} \prod_{v=1}^{u-1}\frac{1}{deg(v)} *\sum_{j=1}^u \sum_{k=j}^u[c_j==0 \&\&c_k=0]E(w)=f(w)∗∏u=1len−1​deg(u)1​=∑u=1len​Xu2​∗∏v=1u−1​deg(v)1​=∑u=1len​∏v=1u−1​deg(v)1​∗∑j=1u​∑k=ju​[cj​==0&&ck​=0],其中deg(u)表示u点出度,这样一来就转化成计数问题了。
\quad可以用dp来计数,dpi,j,0/1,0/1dp_{i,j,0/1,0/1}dpi,j,0/1,0/1​表示走j步到了i点,上面那个柿子,点对类型为(0/1,0/1)的求和。
\quad转移的话,这里贴个代码吧,感觉更清楚
复杂度O(n∗max(n,m))O(n*max(n,m))O(n∗max(n,m))

_for(i,0,k-1){_for(j,1,n){for(int u:G[j]){for(int a=0 ;a<2 ;a++){for(int b=0 ;b<2 ;b++){for(int na=a; na<2 ;na++){for(int nb=b ; nb<2 ;nb++){//下一步c[u]=1的话,na,nb不能变if( c[u] && (na!=a || nb!=b) ) continue;f[i+1][u][na][nb] = (f[i+1][u][na][nb] + i_du[j]*f[i][j][a][b]%mod)%mod;}}   }}}}}

下一个点类型为1的时候,转移有限制。
\quad答案就是∑i=1n∑j=1kdpi,j,1,1\sum_{i=1}^n\sum_{j=1}^kdp_{i,j,1,1}∑i=1n​∑j=1k​dpi,j,1,1​
(代码写的dp[j][i][1/0][1/0],前两维反了一下,懒得改了

完整代码

int c[N],i_du[N];
std::vector G[N];
int f[N][N][2][2];
//第i步,到j的概率和,[0/1][0/1],表示点对(x,y)
ll qsm(int a,int b){ll ans = 1 , tmp = a;while( b ){if( b&1 ) ans = ans * tmp%mod;tmp = tmp * tmp%mod;b>>=1;}return ans;
}
signed main(){ IOS;int n,m,k;cin>>n>>m>>k;_for(i,1,m){int u,v;cin>>u>>v;G[u].push_back(v);G[v].push_back(u);}_for(i,1,n) {cin>>c[i];i_du[i] = qsm((int)G[i].size(),mod-2);}//起点在1f[0][1][0][0] = 1;//枚举前i步_for(i,0,k-1){_for(j,1,n){for(int u:G[j]){for(int a=0 ;a<2 ;a++){for(int b=0 ;b<2 ;b++){for(int na=a; na<2 ;na++){for(int nb=b ; nb<2 ;nb++){//下一步c[u]=1的话,na,nb不能变if( c[u] && (na!=a || nb!=b) ) continue;f[i+1][u][na][nb] = (f[i+1][u][na][nb] + i_du[j]*f[i][j][a][b]%mod)%mod;}}   }}}}}int ans = 0;_for(i,1,k){_for(j,1,n) if(c[j]) ans = (ans + f[i][j][1][1])%mod;}cout<

相关内容

热门资讯

电视安卓系统哪个品牌好,哪家品... 你有没有想过,家里的电视是不是该升级换代了呢?现在市面上电视品牌琳琅满目,各种操作系统也是让人眼花缭...
安卓会员管理系统怎么用,提升服... 你有没有想过,手机里那些你爱不释手的APP,背后其实有个强大的会员管理系统在默默支持呢?没错,就是那...
安卓系统软件使用技巧,解锁软件... 你有没有发现,用安卓手机的时候,总有一些小技巧能让你玩得更溜?别小看了这些小细节,它们可是能让你的手...
安卓系统提示音替换 你知道吗?手机里那个时不时响起的提示音,有时候真的能让人心情大好,有时候又让人抓狂不已。今天,就让我...
安卓开机不了系统更新 手机突然开不了机,系统更新还卡在那里,这可真是让人头疼的问题啊!你是不是也遇到了这种情况?别急,今天...
安卓系统中微信视频,安卓系统下... 你有没有发现,现在用手机聊天,视频通话简直成了标配!尤其是咱们安卓系统的小伙伴们,微信视频功能更是用...
安卓系统是服务器,服务器端的智... 你知道吗?在科技的世界里,安卓系统可是个超级明星呢!它不仅仅是个手机操作系统,竟然还能成为服务器的得...
pc电脑安卓系统下载软件,轻松... 你有没有想过,你的PC电脑上安装了安卓系统,是不是瞬间觉得世界都大不一样了呢?没错,就是那种“一机在...
电影院购票系统安卓,便捷观影新... 你有没有想过,在繁忙的生活中,一部好电影就像是一剂强心针,能瞬间让你放松心情?而我今天要和你分享的,...
安卓系统可以写程序? 你有没有想过,安卓系统竟然也能写程序呢?没错,你没听错!这个我们日常使用的智能手机操作系统,竟然有着...
安卓系统架构书籍推荐,权威书籍... 你有没有想过,想要深入了解安卓系统架构,却不知道从何下手?别急,今天我就要给你推荐几本超级实用的书籍...
安卓系统看到的炸弹,技术解析与... 安卓系统看到的炸弹——揭秘手机中的隐形威胁在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。...
鸿蒙系统有安卓文件,畅享多平台... 你知道吗?最近在科技圈里,有个大新闻可是闹得沸沸扬扬的,那就是鸿蒙系统竟然有了安卓文件!是不是觉得有...
宝马安卓车机系统切换,驾驭未来... 你有没有发现,现在的汽车越来越智能了?尤其是那些豪华品牌,比如宝马,它们的内饰里那个大屏幕,简直就像...
p30退回安卓系统 你有没有听说最近P30的用户们都在忙活一件大事?没错,就是他们的手机要退回安卓系统啦!这可不是一个简...
oppoa57安卓原生系统,原... 你有没有发现,最近OPPO A57这款手机在安卓原生系统上的表现真是让人眼前一亮呢?今天,就让我带你...
安卓系统输入法联想,安卓系统输... 你有没有发现,手机上的输入法真的是个神奇的小助手呢?尤其是安卓系统的输入法,简直就是智能生活的点睛之...
怎么进入安卓刷机系统,安卓刷机... 亲爱的手机控们,你是否曾对安卓手机的刷机系统充满好奇?想要解锁手机潜能,体验全新的系统魅力?别急,今...
安卓系统程序有病毒 你知道吗?在这个数字化时代,手机已经成了我们生活中不可或缺的好伙伴。但是,你知道吗?即使是安卓系统,...
奥迪中控安卓系统下载,畅享智能... 你有没有发现,现在汽车的中控系统越来越智能了?尤其是奥迪这种豪华品牌,他们的中控系统简直就是科技与艺...