• hihocoder 1490 Tree Restoration


    构造。

    从最后一层开始往上构造。最后一层肯定都是叶子结点,距离为2的肯定是同一个父亲,确定好了父亲之后,可以确定上一层每个节点之间的距离,以及上一层每个节点到还未确定的叶子节点之间的距离。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,m,k;
    vector<int>v[110];
    int A[110],L[110],h[110];
    int D[110][110];
    int f[110];
    
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=m;i++) scanf("%d",&A[i]);
        for(int i=1;i<=m;i++)
        {
            while(A[i]--)
            {
                int x; scanf("%d",&x);
                v[i].push_back(x);
            }
        }
        for(int i=1;i<=k;i++) scanf("%d",&L[i]),h[L[i]]=1;
        for(int i=1;i<=k;i++) for(int j=1;j<=k;j++) scanf("%d",&D[L[i]][L[j]]);
    
        for(int i=m;i>=2;i--)
        {
            int last = 0;
            int now = 0;
            while(1)
            {
                if(now==v[i].size()) break;
    
                while(1)
                {
                    if(h[v[i-1][last]]==1) last++;
                    else break;
                }
    
                f[v[i][now]] = v[i-1][last]; now++;
                while(1)
                {
                    if(now==v[i].size()) break;
                    if(D[v[i][now]][v[i][now-1]]!=2) {last++; break;}
                    f[v[i][now]] = v[i-1][last]; now++;
                }
            }
    
            for(int j=0;j<v[i].size();j++)
                for(int t=0;t<v[i].size();t++)
                    D[f[v[i][j]]][f[v[i][t]]]=D[v[i][j]][v[i][t]]-2;
    
            for(int j=0;j<v[i].size();j++)
                for(int t=1;t<=k;t++)
                    D[f[v[i][j]]][L[t]]=D[L[t]][f[v[i][j]]]=D[v[i][j]][L[t]]-1;
        }
    
        for(int i=1;i<=n;i++)
        {
            printf("%d",f[i]);
            if(i<n) printf(" ");
            else printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    「from CommonAnts」寻找 LCM
    P3380 二逼平衡树 [树状数组套可持久化主席树]
    [模板]二次剩余(无讲解)
    [校内训练19_09_10]sort
    [校内训练19_09_06]排序
    [校内训练19_09_06]直径
    [校内训练19_09_05]ca
    [校内训练19_09_02]不同的缩写
    [校内训练19_09_03]c Huge Counting
    [校内训练19_09_02]C
  • 原文地址:https://www.cnblogs.com/zufezzt/p/6676959.html
Copyright © 2020-2023  润新知