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

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

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

      樹的拓撲序計數

       

      樹的拓撲序計數:樹走拓撲排序,從根節點出發,每次只能從已遍歷的點延伸到下一個相鄰點,把樹的節點都遍歷完,所有遍歷方式的情況數目?

       

      對于一棵子樹,它里面有k個點,可以有k!操作情況,但要確保根節點先走,剩下隨意,可以有(k-1)!操作情況(根節點先走,就確定了一個位置,剩余k-1個位置),相當于/k。

      對于當前樹的所有節點和其子樹,都是這樣,/siz(tree_i)

      結果為 n! / siz(tree_i)

       

      F - Distributing Integers (atcoder.jp)

       1 #include <bits/stdc++.h>
       2 using namespace std;
       3 #define LL long long
       4 #define ULL unsigned long long
       5 
       6 const LL mod=1e9+7;
       7 
       8 const double eps_1=1e-5;
       9 const double eps_2=1e-10;
      10 
      11 const int maxn=2e5+10;
      12 
      13 vector<LL> adj[maxn];
      14 LL n,siz[maxn],cheng[maxn],ni[maxn],result[maxn]; //,ni_cheng[maxn]
      15 bool vis[maxn];
      16 
      17 void dfs(LL d)
      18 {
      19     siz[d]++;
      20     vis[d]=1;
      21     for (LL child:adj[d])
      22         if (!vis[child])
      23         {
      24             dfs(child);
      25             siz[d]+=siz[child];
      26         }
      27     (result[1] *= ni[siz[d]]) %= mod;
      28 }
      29 
      30 LL mul(LL a, LL b)
      31 {
      32     LL ans=1;
      33     while (b)
      34     {
      35         if (b&1)
      36             ans=ans*a%mod;
      37         a=a*a%mod;
      38         b>>=1;
      39     }
      40     return ans;
      41 }
      42 
      43 void modify(LL d)
      44 {
      45     vis[d]=1;
      46     for (LL child:adj[d])
      47         if (!vis[child])
      48         {
      49             result[child] = result[d] * siz[child] %mod * ni[n-siz[child]] %mod;
      50             modify(child);
      51         }
      52 }
      53 
      54 int main()
      55 {
      56     LL u,v,i;
      57     cin>>n;
      58     cheng[0]=1;
      59     for (i=1;i<=n;i++)
      60         cheng[i]=cheng[i-1]*i%mod;
      61     /*
      62     ni_cheng[n]=mul(cheng[n],mod-2);
      63     for (i=n-1;i>=0;i--)
      64         ni_cheng[i]=ni_cheng[i+1]*(i+1)%mod;
      65     ni[0]=1;
      66     for (i=1;i<=n;i++)
      67         ni[i]=cheng[i-1]*ni_cheng[i]%mod;
      68     */
      69     
      70     ni[0]=1;
      71     for (i=1;i<=n;i++)
      72         ni[i] = mul(i, mod-2);
      73         
      74     for (i=1;i<n;i++)
      75     {
      76         cin>>u>>v;
      77         adj[u].push_back(v);
      78         adj[v].push_back(u);
      79     }
      80 
      81     memset(vis,0,sizeof(vis));
      82     memset(siz,0,sizeof(siz));
      83     result[1]=cheng[n];
      84     dfs(1);
      85 
      86     memset(vis,0,sizeof(vis));
      87     modify(1);
      88 
      89     for (i=1;i<=n;i++)
      90         cout<<result[i]<<endl;
      91 
      92 
      93     return 0;
      94 }

       

      這樣寫可以減少求逆元的操作數:

       1 #include <bits/stdc++.h>
       2 using namespace std;
       3 #define LL long long
       4 #define ULL unsigned long long
       5 
       6 const LL mod=1e9+7;
       7 
       8 const double eps_1=1e-5;
       9 const double eps_2=1e-10;
      10 
      11 const int maxn=2e5+10;
      12 
      13 vector<LL> adj[maxn];
      14 LL n,siz[maxn],cheng[maxn],ni[maxn],result[maxn]; //,ni_cheng[maxn]
      15 LL ni_cheng[maxn];
      16 bool vis[maxn];
      17 
      18 void dfs(LL d)
      19 {
      20     siz[d]++;
      21     vis[d]=1;
      22     for (LL child:adj[d])
      23         if (!vis[child])
      24         {
      25             dfs(child);
      26             siz[d]+=siz[child];
      27         }
      28     (result[1] *= ni[siz[d]]) %= mod;
      29 }
      30 
      31 LL mul(LL a, LL b)
      32 {
      33     LL ans=1;
      34     while (b)
      35     {
      36         if (b&1)
      37             ans=ans*a%mod;
      38         a=a*a%mod;
      39         b>>=1;
      40     }
      41     return ans;
      42 }
      43 
      44 void modify(LL d)
      45 {
      46     vis[d]=1;
      47     for (LL child:adj[d])
      48         if (!vis[child])
      49         {
      50             result[child] = result[d] * siz[child] %mod * ni[n-siz[child]] %mod;
      51             modify(child);
      52         }
      53 }
      54 
      55 int main()
      56 {
      57     LL u,v,i;
      58     cin>>n;
      59     cheng[0]=1;
      60     for (i=1;i<=n;i++)
      61         cheng[i]=cheng[i-1]*i%mod;
      62     
      63     ni_cheng[n]=mul(cheng[n],mod-2);
      64     for (i=n-1;i>=0;i--)
      65         ni_cheng[i]=ni_cheng[i+1]*(i+1)%mod;
      66     ni[0]=1;
      67     for (i=1;i<=n;i++)
      68         ni[i]=cheng[i-1]*ni_cheng[i]%mod;
      69     
      70     
      71     /*
      72     ni[0]=1;
      73     for (i=1;i<=n;i++)
      74         ni[i] = mul(i, mod-2);
      75     */
      76         
      77     for (i=1;i<n;i++)
      78     {
      79         cin>>u>>v;
      80         adj[u].push_back(v);
      81         adj[v].push_back(u);
      82     }
      83 
      84     memset(vis,0,sizeof(vis));
      85     memset(siz,0,sizeof(siz));
      86     result[1]=cheng[n];
      87     dfs(1);
      88 
      89     memset(vis,0,sizeof(vis));
      90     modify(1);
      91 
      92     for (i=1;i<=n;i++)
      93         cout<<result[i]<<endl;
      94 
      95 
      96     return 0;
      97 }

       

      C-序列_牛客挑戰賽76 (nowcoder.com)

      [ () () () ]

      [] 根節點 () 葉子節點

      如果相鄰滿足左右括號 ( ) 情況則被合并。括號不斷、依次被合并,括號的串逐漸變小。括號的合并方式具有唯一性。

      要確保葉子節點先走(被合并),根節點在這些葉子節點走完了(被合并完了),才能走(才被合并)。

      樹的拓撲序計數

       

       

      類似但實際不同:

      括號序列 - OI Wiki (oi-wiki.org)

      構造方式數目: catalan 卡特蘭數 

       

      posted @ 2024-09-12 01:29  congmingyige  閱讀(317)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 中文无码乱人伦中文视频在线| 精品国产精品中文字幕| 无码中文字幕av免费放| 美国又粗又长久久性黄大片 | 极品vpswindows少妇| 上饶市| 97久久精品人人澡人人爽| 中文字幕一区二区久久综合| 国产精品无遮挡猛进猛出| 亚洲国产美女精品久久久| 国产一级黄色片在线观看| 尹人香蕉久久99天天拍欧美p7| 国产片AV国语在线观看手机版| 国产一区在线播放av| 久久人妻精品国产| 任你躁国产自任一区二区三区| 日韩精品久久不卡中文字幕| 老司机aⅴ在线精品导航| 亚洲av无码专区在线亚| 国产一级av在线播放| 欧美日韩国产综合草草| 日本高清视频网站www| 国产乱色国产精品免费视频| 国产av中文字幕精品| 久久精品国产99麻豆蜜月| 中文字幕制服国产精品| 成熟丰满熟妇av无码区| 免费播放一区二区三区| 免费人成视频在线| 亚洲国产一区二区精品专| 久久96热在精品国产高清| 黄色一级片一区二区三区| 人妻少妇精品视频三区二区| аⅴ天堂国产最新版在线中文| 猫咪网网站免费观看| 精品在免费线中文字幕久久| 亚洲精品综合一区二区三区| 无码高潮爽到爆的喷水视频| 国产午夜福利不卡在线观看| 国产午夜亚洲精品国产成人| 东方av四虎在线观看|