問題への羅区P2607ソリューション

で綿密な研究の木DP、をクリックしてくださいしたい私のブログ


DPモデルでこの問題P1352なしパーティーボス問題の難易度は、一般的な木のDP DPに木を鳴らす方法です。

壊れたエッジ変化とルートを考えてみましょう。前記それは通常木となるよう、上記二点ランダムに採取リング、切断側の2点を見つけることが最初。隣接する二つの点を同時に選択することができないので、再度ルートツリーDPなどの別のポイントにそれを行うには、ツリーDPのルートであることを行い、そして、約最終統計\(F(I)(0 )\ \(G(J)(0 )\) 最大缶。

定義\(F(I)(0/1 )\) 最初のツリーDPである\(Iは\)最適点、\(G(I)(0/1)\)秒木のDP \(私は\)最適点。$ \ {テキストアンス} $は、ツリーリングDPの答えです。(\ \テキスト{E} _ \テキスト{サークル} \) シクロアルキル環セットツリー上の点です。

したがって、木DP回答の環である:
\ [\ {テキスト}回答= maxの\ \ {F(I)(0)、G(J)(0)\} \]

\ [(I、\テキスト{E}でj個の\ _ \テキスト{サークル}、iはNEQ jを\)\]

下の図は、説明するの羅Guqiuキャンプコースウェアを示しています。



次のようにキーコードは次のようになります。

void covertree(int fr)//寻找基环树
{
 used[fr]=1;
 for(int i=head[fr];i;i=e[i].next)
 {
     int to=e[i].to;
     if(used[to]==0)
     {
         covertree(to);
     }
 }
}


void findcir(int fr,int fa)//寻找基环树中的环
{
 if(flag) return ;
 vis[fr]=1;
 for(int i=head[fr];i;i=e[i].next)
 {
     int to=e[i].to;
     if(vis[to]==0)
     {
         findcir(to,fr);
     }else if(to!=fa)
     {
         fri=fr;//第一个点
         toi=to;//第二个点
         E=i;//边的编号
         flag=1;
         return ;
     }
 }
}


void DPf(int fr)//以其中的一点为树根做树形DP
{
 visf[fr]=1;
 f[fr][1]=crit[fr];
 for(int i=head[fr];i;i=e[i].next)
 {
     int to=e[i].to;
     if(visf[to]==0&&(i^1)!=E)//保证不会选到第一个点和第二个点,相当于断边
     {
         DPf(to);
         f[fr][0]+=max(f[to][0],f[to][1]);
         f[fr][1]+=f[to][0];
     }
 }
}


void DPg(int fr)//再以另一点为树根再做一次树形DP
{
 visg[fr]=1;
 g[fr][1]=crit[fr];
 for(int i=head[fr];i;i=e[i].next)
 {
     int to=e[i].to;
     if(visg[to]==0&&(i^1)!=E)
     {
         DPg(to);
         g[fr][0]+=max(g[to][0],g[to][1]);
         g[fr][1]+=g[to][0];
     }
 }
}

for(int i=1;i<=n;i++)//调用+统计答案
{
 if(used[i]==1) continue;
 covertree(i);
 flag=0;
 findcir(i,-1);
 DPf(fri);
 DPg(toi);
 ans+=max(f[fri][0],g[toi][0]);
}

特別な注意

  • このタイトルではなく、単一のツリーリングツリーよりも、リングの木の森で、それが一緒になって環の木、そして最終的にすべての答えをカバー繰り返されるように探します。

  • 原因壊れたエッジに、スターので、前方カウンタをei1に初期化する必要があります。

    • 用多个数组标记(used[],vis[],visf[],visg[])。
    • 一定要注意 f,gfr,to,不要手快打错了。

おすすめ

転載: www.cnblogs.com/nth-element/p/11785016.html