• Truck History POJ 1789


    http://poj.org/problem?id=1789

    题意:简单来说,就是给出一个 n 行的字符串, 字符串与字符串间的距离为它们相照应的比较有几个不同的字母, 然后求出 n 行字符串直接或间接相连中最短的距离为多少。(生成树模板)

    写最小生成树的专题真的比之前其他专题感觉好多了。(%>_<%)

     

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    #define maxn 2510
    #define oo 0x3f3f3f3f
    int maps[maxn][maxn], dist[maxn], v[maxn];
    char str[maxn][maxn];
    int n;
    
    void Init()
    {
        for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
        {
            if(i==j)  maps[i][j]=0;
            else maps[i][j] = maps[j][i]=oo;
        }
    }
    
    int solve(int p, int q)
    {
        int ans = 0;
    
       for(int i=0; str[p][i]; i++)
        if(str[p][i] != str[q][i])
            ans ++;
    
        return ans;
    }
    
    void Dij()
    {
        memset(v, 0, sizeof(v));
    
        int sum = 0;
        for(int i=1; i<=n; i++)
            dist[i] = maps[1][i];
        v[1] = 1;
    
        for(int i=1; i<n; i++)
        {
            int index, mins=oo;
            for(int j=1; j<=n; j++)
            {
                if(!v[j] && dist[j]<mins)
                {
                    index = j;
                    mins = dist[j];
                }
            }
    
            sum+=mins;
            v[index] = 1;
            for(int j=1; j<=n; j++)
            {
                if(!v[j] && dist[j]>maps[index][j])
                {
                    dist[j] = maps[index][j];
                }
            }
        }
    
        printf("The highest possible quality is 1/%d.
    ", sum);
    }
    
    int main()
    {
        while(scanf("%d", &n), n)
        {
            for(int i=1; i<=n ;i++)
                scanf("%s", str[i]);
    
             Init();
    
            for(int i=1; i<n; i++)
            {
                for(int j=i+1; j<=n; j++)
                    maps[i][j] = maps[j][i] = min(solve(i, j), maps[i][j]);
            }
    
            Dij();
        }
        return 0;
    }
    View Code
  • 相关阅读:
    简介&目录
    Lucas 定理
    扩展欧几里得算法(exgcd)
    【做题记录】CF23B Party
    【做题记录】CF1375D Replace by MEX
    【做题记录】CF194B Square
    SPFA
    dijkstra
    CSP-J&S 2020 游记
    中国剩余定理(CRT)
  • 原文地址:https://www.cnblogs.com/daydayupacm/p/5695985.html
Copyright © 2020-2023  润新知