<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [AtCoder Beginner Contest 281][G. Farthest City]

      CF1657E 的做法十分相似

      題目鏈接:G - Farthest City

      題目大意:問有多少個 \(n(3\le n\le 500)\) 個點的無向連通圖滿足,若設 \(1\)\(i\) 的最短路距離為 \(dis_i\),則 \(dis_n\) 嚴格大于其它所有的 \(dis_i\)。輸出方案數對 \(M(10^8\le M \le 10^9)\) 取模。

      考慮最短路的值一定是連續的,那么若最短路為 \(i\) 的點數有 \(c_i\) 個,且 \(dis_n=k\),則方案數可以計算

      \[Ans=\binom{n-2}{c_2,c_3,...,c_{k-1}}\times \prod_{i=1}^{k} (2^{c_{i-1}}-1)^{c_i}\times 2^{\binom{c_i}{2}} \]

      其中,\(\sum_{i=0}^{k}c_i=n,c_0=c_k=1\)\((2^{c_{i-1}}-1)^{c_i}\) 的含義為最短路為 \(i\) 的點是從最短路為 \(i-1\) 的點連接過來的,那么對于每個這樣的點,他可以選擇上一層的任意一個非空子集進行連接。\(2^{\binom{c_i}{2}}\) 的含義則是,對當前層的所有點,兩兩之間可以任意連接,對應可連接的邊數為 \(\binom{c_i}{2}\),于是會有 \(2^{\binom{c_i}{2}}\) 的系數。

      考慮背包,按最短路的值從小到大一批批安排當前點,那么有一個初始的 DP 想法,就是令 \(f_{i,j,k}\) 表示當前已經安排了 \(i\) 個點,目前最短路的最大值為 \(j\),對應點的個數為 \(k\) 的方案數,那么枚舉最短路值為 \(j+1\) 的點的數量 \(cnt\),可以轉移到 \(f_{i+cnt,j+1,cnt}\),轉移系數為 \(\binom{n-1-i}{cnt}\times (2^{j}-1)^{cnt}\times 2^{\binom{cnt}{2}}\)。但是直接這樣做是 \(O(n^4)\) 的。

      發現轉移系數與 \(j\) 無關,所以這一維可以直接省去,于是 DP 方式就變成,設 \(f_{i,j}\) 表示當前已經安排了 \(i\) 個點,且目前最短路最大的點數為 \(j\) 的方案數,那么同樣枚舉下一層的點數 \(k\),就能轉移到 \(f_{i+k,k}\),轉移系數為 \(\binom{n-1-i}{k}\times (2^{j}-1)^{k}\times 2^{\binom{k}{2}}\)。初始值設 \(f_{1,1}=1\),最后答案即為 \(\sum_{j=1}^{n-1} f_{n-1,j}\times (2^j-1)\)

      #include<bits/stdc++.h>
      using namespace std;
      #define N 510
      #define LL long long
      int n,MOD,f[N][N],c[N][N],p[N*N],ans;
      LL qow(LL x,LL y){return y?(y&1?x*qow(x,y-1)%MOD:qow(x*x%MOD,y/2)):1;}
      int main()
      {
      	scanf("%d%d",&n,&MOD);
      	p[0]=c[0][0]=1;
      	for(int i=1;i<=n;i++){
      		c[i][0]=c[i][i]=1;
      		for(int j=1;j<i;j++)
      			c[i][j]=(c[i-1][j]+c[i-1][j-1])%MOD;
      	}
      	for(int i=1;i<=n*n;i++)p[i]=2ll*p[i-1]%MOD;
      	f[1][1]=1;
      	for(int i=1;i<n;i++)
      	for(int j=1;j<=i;j++)if(f[i][j])
      		for(int k=1;i+k<n;k++)
      			f[i+k][k]=(f[i+k][k]+1ll*f[i][j]*c[n-i-1][k]%MOD*qow(p[j]+MOD-1,k)%MOD*p[k*(k-1)/2]%MOD)%MOD;
      	for(int j=1;j<=n-1;j++)
      		ans=(ans+1ll*f[n-1][j]*(p[j]+MOD-1)%MOD)%MOD;
      	printf("%d\n",ans);
      }
      

      時間復雜度為 \(O(n^3 \log n)\),預處理了 \(2^i\) 的值稍微進行了點常數優化。實際上是可以通過 \(O(n^2)\) 預處理每個 \((2^j-1)^k\) 的值把復雜度降到 \(O(n^3)\) 的,但是既然能過就不優化了。╮(╯▽╰)╭

      posted @ 2023-03-17 10:32  DeaphetS  閱讀(51)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 亚洲一区二区国产av| 国产精品成人自产拍在线| 国产精品视频亚洲二区| 精品人妻午夜一区二区三区四区| 国产成人一区二区三区在线 | 国产精品一区二区不卡视频| 少妇愉情理伦片丰满丰满午夜| 久久亚洲精品中文字幕| 香蕉在线精品一区二区| 库伦旗| 韩国av无码| 国产69精品久久久久99尤物| 国产不卡av一区二区| 欧洲亚洲精品免费二区| 色色97| 色综合 图片区 小说区| 东京热人妻无码一区二区av| 国产农村老熟女国产老熟女 | 黑龙江省| 国产又色又爽又黄的网站免费| 久久国产福利播放| 苍井空毛片精品久久久| 中文字幕乱偷无码av先锋蜜桃| 精品午夜福利短视频一区| 999精品全免费观看视频| 亚洲国产欧美一区二区好看电影| 91青青草视频在线观看| 九九久久自然熟的香蕉图片| 国产不卡免费一区二区| 国产精品成人午夜久久| 一区二区中文字幕视频| 日韩在线观看精品亚洲| 欧洲码亚洲码的区别入口| 国产高清不卡视频| 国产av剧情md精品麻豆| 国产无遮挡又黄又爽高潮| 久久一亚色院精品全部免费| 久久国内精品一国内精品| 大地资源网第二页免费观看| 国产精品99久久不卡| av永久免费网站在线观看|