青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

原題地址
典型的二次遞推/DP的題目。
首先,題目中的“不便利值”指的是某個點到根的路徑上的木有被選定鏈覆蓋的邊的條數(shù)。

第一問:設(shè)F[i][0..2]分別為當子樹i中結(jié)點i的狀態(tài)為不參與鏈(0)、作為某鏈端點(1)、作為某鏈中間點(2)時,子樹i中的結(jié)點到i的最小不便利值。為了得到F,需要設(shè)立G[j][k(0..2)]表示結(jié)點i的前j棵子樹中,有k棵的根結(jié)點與結(jié)點i接上的最小的最大不便利值。顯然,不和i接上的,狀態(tài)為0、1、2都行,但不便利值要加1,而和i接上的狀態(tài)只能是0或1,不加1。

問題是第二問。第二問的難點在于,當i取得最小不便利值時,i的每個子結(jié)點并非都取到最小不便利值。舉個例子,結(jié)點i的最小不便利值為3,它的某個子結(jié)點j的最小不便利值為2,則當j與i接上時,子樹j的內(nèi)部既可以取不便利值為2的解,也可以取不便利值為3的解。所以,為了解決第二問,需要求出結(jié)點i的最小不便利值為x的解的總數(shù)。萬幸的是,x的范圍并不是太大,可以證明,x不會超過log3N(下取整),也就是當N=100000時x最大為10。因此,最后仍然不會T掉。

這題的一個啟示就是,在求類似于“最優(yōu)解計數(shù)”的問題中,不要認為當后面的狀態(tài)取得最優(yōu)解時,前面的狀態(tài)一定取得最優(yōu)解。因此,不能只記錄某狀態(tài)取得最優(yōu)解的個數(shù),而要記錄該狀態(tài)取得每一個可行解時的個數(shù)。

代碼:
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
#define ll long long
const int MAXN = 100010, MAXW = 11, INF = ~0U >> 2;
struct edge {
    
int a, b, pre, next;
} E0[MAXN 
* 3], E[MAXN << 1];
int n, m0, m, Q[MAXN], F[MAXN][3], G[MAXN][3], res1 = 0;
ll MOD, FS[MAXN][MAXW][
3], S[MAXN][MAXW][3], res2 = 0;
bool vst[MAXN];
void init_d()
{
    re(i, n) E0[i].pre 
= E0[i].next = E[i].pre = E[i].next = i; m0 = m = n;
}
void add_edge0(int a, int b)
{
    E0[m0].a 
= a; E0[m0].b = b; E0[m0].pre = E0[a].pre; E0[m0].next = a; E0[a].pre = m0; E0[E0[m0].pre].next = m0++;
    E0[m0].a 
= b; E0[m0].b = a; E0[m0].pre = E0[b].pre; E0[m0].next = b; E0[b].pre = m0; E0[E0[m0].pre].next = m0++;
}
void add_edge(int a, int b)
{
    E[m].a 
= a; E[m].b = b; E[m].pre = E[a].pre; E[m].next = a; E[a].pre = m; E[E[m].pre].next = m++;
}
void init()
{
    
int _M; scanf("%d%d"&n, &_M); cin >> MOD; if (_M < n - 1) {res1 = res2 = -1return;} init_d(); int a0, b0;
    re2(i, 
1, n) {scanf("%d%d"&a0, &b0); add_edge0(--a0, --b0);}
}
void prepare()
{
    re(i, n) vst[i] 
= 0; Q[0= 0; vst[0= 1int x, y;
    
for (int front=0, rear=0; front<=rear; front++) {
        x 
= Q[front];
        
for (int p=E0[x].next; p != x; p=E0[p].next) {
            y 
= E0[p].b;
            
if (!vst[y]) {vst[y] = 1; Q[++rear] = y; add_edge(x, y);}
        }
    }
    re(i, n) 
if (!vst[i]) {res1 = -1; res2 = -1return;}
}
inline 
int minv3(int s1, int s2, int s3)
{
    
int s0 = s1 <= s2 ? s1 : s2;
    
return s0 <= s3 ? s0 : s3;
}
inline 
int minv2(int s1, int s2)
{
    
return s1 <= s2 ? s1 : s2;
}
void solve()
{
    
int x, y, len, v1, v2, v01, v02; ll sum;
    rre(i, n) {
        x 
= Q[i]; len = 0; G[0][0= 0; G[0][1= G[0][2= INF;
        
for (int p=E[x].next; p != x; p=E[p].next) {
            y 
= E[p].b; len++;
            v1 
= minv3(F[y][0], F[y][1], F[y][2]) + 1; v2 = minv2(F[y][0], F[y][1]);
            G[len][
0= v1 >= G[len - 1][0? v1 : G[len - 1][0];
            v01 
= v1 >= G[len - 1][1? v1 : G[len - 1][1];
            v02 
= v2 >= G[len - 1][0? v2 : G[len - 1][0];
            G[len][
1= minv2(v01, v02);
            v01 
= v1 >= G[len - 1][2? v1 : G[len - 1][2];
            v02 
= v2 >= G[len - 1][1? v2 : G[len - 1][1];
            G[len][
2= minv2(v01, v02);
        }
        re(j, 
3) F[x][j] = G[len][j];
        re(j, MAXW) {S[
0][j][0= 1; S[0][j][1= S[0][j][2= 0;} len = 0;
        
for (int p=E[x].next; p != x; p=E[p].next) {
            y 
= E[p].b; len++;
            re(j, MAXW) re(k, 
3) {
                S[len][j][k] 
= 0;
                
if (j) {
                    sum 
= 0; re(k0, 3) {sum += FS[y][j - 1][k0]; if (sum >= MOD) sum -= MOD;}
                    S[len][j][k] 
= (sum * S[len - 1][j][k]) % MOD;
                }
                
if (k) {
                    sum 
= 0; re(k0, 2) {sum += FS[y][j][k0]; if (sum >= MOD) sum -= MOD;}
                    S[len][j][k] 
= (S[len][j][k] + sum * S[len - 1][j][k - 1]) % MOD;
                }
            }
        }
        re(j, MAXW) re(k, 
3) FS[x][j][k] = S[len][j][k];
    }
    res1 
= minv3(F[0][0], F[0][1], F[0][2]);
    res2 
= 0; re(i, 3if (F[0][i] == res1) res2 += FS[0][F[0][i]][i]; res2 %= MOD;
}
void pri()
{
    cout 
<< res1 << endl << res2 << endl;
}
int main()
{
    init();
    
if (!res1) prepare();
    
if (!res1) solve();
    pri();
    
return 0;
}


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜精品在线| 久久亚洲欧洲| 亚洲成色777777在线观看影院| 一区二区三区高清| 亚洲视频二区| 亚洲欧美精品在线观看| 香蕉成人啪国产精品视频综合网| 欧美亚洲视频| 久久综合影视| 亚洲精选中文字幕| 亚洲欧美色婷婷| 久久黄色小说| 欧美人与性动交α欧美精品济南到| 欧美视频一区二区| 激情文学一区| 亚洲一区二区高清| 久久精品视频免费播放| 亚洲高清久久| 亚洲午夜电影网| 久久裸体艺术| 欧美视频日韩视频| 国产一区三区三区| 99www免费人成精品| 久久精品成人一区二区三区蜜臀| 欧美激情视频一区二区三区不卡| 亚洲色图在线视频| 老司机67194精品线观看| 欧美视频中文在线看 | 欧美在线啊v| 欧美国产精品一区| 亚洲综合日韩在线| 欧美激情精品久久久久久大尺度 | 欧美不卡视频一区| 国产亚洲欧美色| 在线中文字幕日韩| 男人的天堂成人在线| 亚洲视频在线观看网站| 欧美jizzhd精品欧美喷水| 国产欧美一区二区在线观看| 亚洲激情电影在线| 亚洲黄色在线| 亚洲欧美日韩国产综合精品二区| 久久久久在线| 亚洲无吗在线| 欧美日韩国产亚洲一区| 国产主播一区二区| 亚洲欧美www| 最新国产乱人伦偷精品免费网站| 久久精品理论片| 国产精品视频福利| 亚洲一区二区欧美| 99精品热视频| 欧美三级精品| 99这里只有精品| 欧美成年人视频网站| 久久精品亚洲热| 国际精品欧美精品| 久久国产主播| 久久av一区| 国产在线观看一区| 久久精品国产综合| 先锋影音网一区二区| 国产伦精品一区二区| 亚洲欧美制服另类日韩| 这里只有精品电影| 欧美亚洲成人精品| 亚洲欧美久久| 久久成人免费电影| 一区在线播放| 亚洲国产欧美一区二区三区同亚洲| 麻豆国产精品va在线观看不卡| 亚洲福利在线看| 亚洲大胆av| 欧美日韩不卡| 欧美一区二区三区在线| 久久成人免费电影| 亚洲精品国产拍免费91在线| 最新亚洲电影| 国产精品国产三级国产aⅴ9色| 亚洲欧美福利一区二区| 亚洲欧美日韩在线| 亚洲高清视频中文字幕| 亚洲精品久久久久久久久久久久久| 欧美精品在线播放| 新片速递亚洲合集欧美合集| 久久精品国产2020观看福利| 亚洲激情在线观看| 99精品国产热久久91蜜凸| 国产精品美女在线观看| 久久综合一区二区三区| 欧美精品福利视频| 性亚洲最疯狂xxxx高清| 久久全球大尺度高清视频| 99热在这里有精品免费| 亚洲字幕一区二区| 亚洲国产美女精品久久久久∴| 99精品视频免费观看| 国产一区在线播放| 亚洲日本va午夜在线电影| 亚洲综合激情| 亚洲国产99精品国自产| 日韩一本二本av| 一区二区三区在线观看国产| 亚洲毛片视频| 在线观看成人小视频| 99这里有精品| 亚洲国产一区二区精品专区| 亚洲影音先锋| 亚洲日本视频| 久久福利毛片| 亚洲一区二区欧美日韩| 久久综合久久综合久久| 欧美一区二区高清在线观看| 欧美激情亚洲视频| 久久在线观看视频| 国产精品久久久久久久电影 | 欧美二区在线播放| 久久亚洲精品伦理| 国产精品亚洲综合一区在线观看| 亚洲国语精品自产拍在线观看| 国产一区观看| 亚洲视频你懂的| 一本色道久久综合亚洲精品不卡| 久久久91精品国产| 久久激情视频免费观看| 欧美午夜www高清视频| 亚洲激情啪啪| 亚洲人成网站777色婷婷| 久久精品在线观看| 久久这里有精品视频| 国产色爱av资源综合区| 亚洲小说欧美另类社区| 亚洲一区二区三区四区中文| 欧美伦理在线观看| 亚洲精品日韩激情在线电影| 亚洲毛片av在线| 欧美好骚综合网| 亚洲激情国产精品| 日韩亚洲精品在线| 欧美韩日一区二区| 亚洲毛片一区| 亚洲欧美视频在线观看| 国产精品久久久久毛片大屁完整版 | 欧美一级理论性理论a| 久久av一区二区三区漫画| 国产精品夜色7777狼人| 亚洲欧美成人| 久久精品免费| 尤物精品国产第一福利三区| 久久亚洲国产成人| 亚洲国产日韩欧美在线99 | 一本色道久久加勒比精品 | 亚洲国产99精品国自产| 免费在线亚洲欧美| 亚洲精品一区二区三区99| 亚洲午夜在线观看| 国产精品一级二级三级| 久久av免费一区| 亚洲国产一区在线观看| 中文欧美在线视频| 亚洲欧美日本视频在线观看| 久久久久久久网| 亚洲国产高清自拍| 欧美日韩美女| 欧美一区二区在线观看| 亚洲福利视频二区| 亚洲欧美国产制服动漫| 国内精品免费在线观看| 欧美久久久久免费| 亚洲男人的天堂在线观看| 蜜臀久久久99精品久久久久久| 亚洲精选大片| 国产精品无码永久免费888| 久久精品国产99国产精品澳门| 亚洲电影免费在线| 欧美主播一区二区三区| 亚洲另类自拍| 海角社区69精品视频| 欧美日韩免费观看一区| 久久久999精品| 中日韩视频在线观看| 欧美sm视频| 久久精品国产精品亚洲| 亚洲人成在线观看| 国产午夜精品视频| 欧美三级在线视频| 免费成人黄色片| 久久国产精品久久久久久久久久| 99精品欧美一区二区三区综合在线| 免费成人在线观看视频| 香港成人在线视频| 一本色道久久综合亚洲精品不| 红桃视频亚洲| 国产亚洲成av人在线观看导航| 欧美日韩久久精品| 欧美1区2区3区| 久久婷婷麻豆| 久久国产精品久久久久久电车| 亚洲女优在线| 亚洲一级在线观看|