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

算法學(xué)社
記錄難忘的征途
posts - 141,comments - 220,trackbacks - 0
終于AK了,作為題解寫在這里,我的ID: hanfei19910905

A
簡單的字符串處理(略)

B
有N張撲克牌(N<=52)排成一行,四種花色12種點(diǎn)數(shù)。每次可以將最右一堆牌(位置k)至于k-1或者k-3的頂部,當(dāng)且僅當(dāng)花色或者點(diǎn)數(shù)相等。問最后是否可以合并為一堆。
算法分析:
    動態(tài)規(guī)劃,DP[i,a,b,c]代表長度為i,最后三堆頂部為a,b,c,是否可以合并為一堆。
    轉(zhuǎn)移: dp[i,a,b,c] = dp[i-1,c,a,b] | dp[i-1,num[i-3],a,c]。

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
const string aa = "23456789TJQKA";
const string bb = "SDHC";
string ch[100];
int num[100];
int dp[60][60][60][60];
bool chk(int a,int b){
    return a/13 == b/13 || a % 13 == b%13;
}
bool dfs(int p,int a,int b,int c){
    int &ans = dp[p][a][b][c];
    if(ans !=-1) return ans;
    if(p == 0) return chk(b,c) && chk(a,c);
    ans = 0;
    if(chk(c,b)) ans = dfs(p-1,num[p-1],a,c);
    if(chk(num[p-1],c)) ans |= dfs(p-1,c,a,b);
    return ans;
}
int find(const string& a, char b){
    for(int i=0;i<a.size();i++)
        if(b==a[i]) return i;

}
int main(){
    int n;
    while(cin >> n){
        for(int i=0;i<n;i++){
            cin >> ch[i];
            num[i] = find(bb,ch[i][1]) * 13 + find(aa,ch[i][0]);
        }
        memset(dp,-1,sizeof(dp));
        if(n == 1) puts("YES");
        if(n == 2) puts(chk(num[0],num[1]) ? "YES" : "NO");
        if(n >= 3) puts(dfs(n-3,num[n-3],num[n-2],num[n-1]) ? "YES" : "NO");
    }
}
C
有點(diǎn)數(shù)為N(N<=100)的無向圖。現(xiàn)在要選擇一個(gè)點(diǎn),給這個(gè)點(diǎn)的鄰接邊染色。讓1到n的所有最短路經(jīng)過的染色邊的期望最高,求最高期望。
算法分析:
    設(shè)f(s,e)是s到e有多少條最短路,廣搜可求。復(fù)雜度O(V+E)
    先將1到n有多少條最短路求出來。
    然后枚舉每個(gè)點(diǎn)u,如果這是最短路上的點(diǎn),那么選擇它的期望是 2*f(1,u)*f(u,n)/f(1,n)。
    復(fù)雜度O(V*(V+E))

#include<iostream>
#include<cstdio>
using namespace std;
const int V = 105;
int G[V][V],dis[V][V]; double dp[V];
int Q[V], stp[V],Du[V]; double way[V];
int n,m;
template <typename T>inline void chkmax(T &a, const T b){if(a<b) a= b;}
void bfs(int s,int e){
    for(int i=0;i<n;i++){
        stp[i] = -1;
        way[i] = 0;
    }
    way[s] = 1.0;
    stp[s] = 0;
    Q[0] = s;
    int head = 0, tail = 1;
    while(head<tail){
        int u= Q[head++];
        for(int v = 0; v<n; v++) if(G[u][v]){
            if(stp[v] == -1){
                stp[v] = stp[u] + 1;
                way[v] = way[u];
                Q[tail ++] = v;
                if(v == e) Du[v] = 1;
            }
            else if(stp[v] == stp[u] + 1){
                way[v] += way[u];
                if(v == e) Du[v] ++;
            }
        }
    }
    dis[s][e] = dis[e][s] = stp[e];
    dp[e] *= way[e];
}
int main(){
    while(~scanf("%d%d",&n,&m)){
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                G[i][j] = 0;
        for(int i=0;i<n;i++) Du[i] = 0, dp[i] = 1.0;
        for(int i=0;i<m;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            u--; v--;
            G[u][v] = G[v][u] = 1;
        }
        bfs(0,n-1);
        bfs(n-1,0);
        double ans =1.0; 
        for(int i=1;i<n-1;i++){
            bfs(0,i);
            bfs(n-1,i);
            if(dis[0][i] + dis[i][n-1] == dis[0][n-1])
                chkmax(ans, 2* dp[i]/dp[0] );
        }
        printf("%.10lf\n",ans);
    }
}
D
簡單貪心(略)
E
給一個(gè)森林,點(diǎn)數(shù)為100,000。詢問100,000次。每次給點(diǎn)u,整數(shù)數(shù)k。問有多少個(gè)點(diǎn)v,是u的第k個(gè)祖先的孩子,且距離還是k。
算法分析:
    
    預(yù)處理出u的2^i個(gè)祖先。再把同一深度的點(diǎn)放到一個(gè)vector里。
    設(shè)u的k祖先是v。在深度為k+deep[v]的vector里,找第一時(shí)間戳位于v的第一時(shí)間戳和第二時(shí)間戳的之間的所有點(diǎn)。二分可解。
    預(yù)處理O(nlogn)詢問log(n)
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int MXB = 18;
const int V = 100005;
const int E = V<<1;
// build graph
int head[V], nxt[E], pnt[E], e;
void add(int u,int v){
    nxt[e] = head[u];
    head[u] = e;
    pnt[e++] = v;
}
// dfs
int dep[V],tm,pre[V],snd[V],P[V][MXB];
vector<int> temp[V];
void dfs(int u,int f){
    dep[u] = dep[f] + 1;
    temp[dep[u]].push_back(tm);
    pre[u] = tm++;
    P[u][0] = f;
    for(int i=1; i< MXB; i++){
        P[u][i] = P[P[u][i-1]][i-1];
    }
    for(int i=head[u];i!=-1;i=nxt[i]){
        int v = pnt[i];
        if(v == f) continue;
        if(pre[v]==-1) dfs(v,u);
    }
    snd[u] = tm++;
}
// lca
inline void goup(int &u,int d){
    for(int i=0;i<MXB;i++) if((1<<i) & d)
        u = P[u][i];
}
int find(int v,int k){
    vector<int> &t = temp[k];
    int l =0, r = t.size();
    while(l<r){
        int mid = l+r >>1;
        if(t[mid] >= v) r = mid; else l = mid+1;
    }
    return r;
}
// main
int main(){
    int n;
    cin >> n;
    static int prt[V] ;
    for(int i=1;i<=n;i++) pre[i] = head[i] = -1;
    tm = e = 0;
    for(int i=1;i<=n;i++){
        scanf("%d",&prt[i]);
        if(prt[i]) {add(i,prt[i]); add(prt[i],i);}
    }
    forint i=1; i<=n ; i++) if(!prt[i]) dfs(i, 0);
    int q,u,k; cin >> q;
    while(q -- ){
        scanf("%d%d",&u,&k);
        goup(u,k);
        if(!u) {cout<<"0 "; continue;}
        k += dep[u];
        cout<< find(snd[u],k) - find(pre[u],k) - 1 <<" ";
    }
    cout<< endl;
}
posted on 2012-07-24 17:23 西月弦 閱讀(328) 評論(2)  編輯 收藏 引用 所屬分類: 解題報(bào)告

FeedBack:
# re: codeforces #130 div2
2012-07-25 19:29 | wuyiqi
最后一題你找LCA用的是什么方法?好簡潔  回復(fù)  更多評論
  
# re: codeforces #130 div2
2012-07-25 19:30 | 西月弦
@wuyiqi
倍增法  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲美女视频在线免费观看| 久久午夜视频| 国内精品久久久久久久果冻传媒 | 久久综合九色99| 久久婷婷激情| 欧美成人福利视频| 欧美激情精品久久久久久变态| 欧美激情中文字幕乱码免费| 欧美日韩一级大片网址| 国产精品免费小视频| 国产精品久久久久久久久免费 | 国产精品嫩草99a| 国产日韩精品久久| 亚洲国产精品久久| 亚洲视频电影图片偷拍一区| 午夜国产一区| 欧美亚洲综合网| 蜜桃精品一区二区三区 | 久久国产视频网| 欧美成人中文字幕| a4yy欧美一区二区三区| 国产视频在线观看一区二区三区| 欧美精品少妇一区二区三区| 欧美国产第二页| 国产精品尤物福利片在线观看| 国产日韩成人精品| av成人毛片| 久久野战av| 一二三区精品| 欧美国产日本| 韩国成人精品a∨在线观看| 日韩午夜中文字幕| 麻豆成人综合网| 午夜精品福利在线观看| 女仆av观看一区| 国内精品美女在线观看| 亚洲制服少妇| 亚洲精品国产精品久久清纯直播| 亚洲欧美国产精品专区久久| 欧美精品一区二区三区蜜桃| 合欧美一区二区三区| 亚洲摸下面视频| 亚洲麻豆av| 欧美成人首页| 亚洲欧洲一区二区三区| 久久一二三四| 久久精品女人天堂| 国一区二区在线观看| 欧美在线日韩精品| 亚洲一区在线观看视频| 欧美香蕉大胸在线视频观看| 日韩视频在线一区| 亚洲激情欧美| 欧美高清不卡| 亚洲久久在线| 亚洲国产另类精品专区| 老司机午夜精品视频| 尤物精品在线| 欧美成人按摩| 免费久久99精品国产自| 亚洲国产片色| 亚洲人体一区| 国产精品高潮呻吟久久av黑人| 亚洲网站啪啪| 亚洲天堂免费观看| 国产九九精品视频| 久久久久久久97| 久久综合图片| 亚洲精品乱码| 一区二区三区导航| 国产精品日日摸夜夜摸av| 新狼窝色av性久久久久久| 性色一区二区三区| 激情视频亚洲| 亚洲国产精品va在线观看黑人| 欧美激情一区二区三区| 在线亚洲欧美| 亚洲欧美日韩精品综合在线观看 | 欧美高清视频免费观看| 9久草视频在线视频精品| 一区二区在线观看视频| 一区二区欧美精品| 久久青草欧美一区二区三区| 久久精品国产一区二区三区 | 亚洲欧美日韩人成在线播放| 亚洲综合色在线| 在线播放日韩专区| 亚洲精品1区| 国产精品日韩在线观看| 另类酷文…触手系列精品集v1小说| 国产亚洲在线| 美乳少妇欧美精品| 欧美三级乱人伦电影| 久久精品视频网| 久久综合九九| 欧美一级播放| 欧美激情1区| 欧美在线视频一区| 欧美理论电影在线播放| 久久精品视频免费播放| 欧美欧美全黄| 美腿丝袜亚洲色图| 国产精品女人网站| 亚洲国产精品国自产拍av秋霞| 国产精品人人爽人人做我的可爱| 农村妇女精品| 国产手机视频精品| 日韩视频在线免费| 1024欧美极品| 亚洲欧美激情视频| 夜夜嗨av一区二区三区| 久久久精品动漫| 欧美一区二区三区四区夜夜大片| 免费成人黄色| 久久青草欧美一区二区三区| 国产精品萝li| 亚洲狼人精品一区二区三区| 亚洲大黄网站| 欧美在线观看天堂一区二区三区| 亚洲精品四区| 久久久亚洲一区| 99国内精品久久| 先锋影音网一区二区| 在线中文字幕不卡| 美女福利精品视频| 久久资源在线| 国产综合网站| 久久国产精品久久久久久久久久 | 国产精品一区二区视频| 亚洲日本成人| 亚洲精品国产品国语在线app| 久久精品中文字幕一区二区三区| 性欧美xxxx视频在线观看| 欧美三级电影精品| 中文精品在线| 亚洲综合日韩在线| 国产精品国码视频| 亚洲午夜一区二区| 欧美一级在线播放| 国产欧美日韩一区二区三区在线观看 | 一本色道久久综合亚洲精品不| 伊人精品在线| 亚欧美中日韩视频| 欧美一区深夜视频| 国产一区二区成人久久免费影院| 亚洲欧美在线网| 久久黄色网页| 一区在线影院| 免费视频一区| 亚洲精品久久久久| 亚洲一区二区三区免费在线观看 | 国产精品国产三级国产普通话蜜臀| 国产精品99久久99久久久二8| 亚洲欧美日韩视频二区| 国产午夜精品理论片a级大结局| 欧美亚洲一区在线| 久久综合成人精品亚洲另类欧美| 在线免费观看一区二区三区| 欧美成ee人免费视频| 99成人在线| 久久精品视频播放| 亚洲国产欧洲综合997久久| 欧美精品免费看| 亚洲男人天堂2024| 麻豆精品在线观看| 一二三区精品福利视频| 国产精品视频九色porn| 久久久久www| 国产欧美精品一区aⅴ影院| 国产精品一区二区三区四区五区| 亚洲欧美综合精品久久成人| 久久精品国产清自在天天线| 在线播放视频一区| 欧美日韩在线播| 久久国产成人| 日韩视频在线一区二区| 久久久久久97三级| 日韩视频免费观看高清在线视频| 欧美性天天影院| 久久久综合网站| 亚洲永久精品国产| 亚洲人成77777在线观看网| 欧美夜福利tv在线| 日韩视频免费观看高清完整版| 国产视频亚洲精品| 欧美日韩国产一中文字不卡| 久久久亚洲高清| 亚洲视频网在线直播| 欧美大色视频| 久久久久9999亚洲精品| 一区二区三区四区五区在线| 极品少妇一区二区三区| 国产精品户外野外| 欧美国产视频在线观看| 欧美自拍偷拍| 小黄鸭精品aⅴ导航网站入口 | 欧美国产一区二区在线观看| 午夜精品一区二区三区在线播放 | 欧美一区二区精品| 久久蜜桃精品|