• 295B


    题意:给出任意两点之间的距离,然后逐个删除这些点和与点相连的边,问,在每次删除前的所有点对的最短距离之和

    分析:首先想到的是floyd,但是如果从前往后处理,复杂度是(500)^4,超时,我们从后往前处理,这样我们可以看作是添加点,而且这样的话每次只需要考虑添加点的缩进,所以复杂度是(500)^3,注意,我们每次添加一个点,就给他一个标记,代表这个点已经添加,然后算距离的时候,只有添加过的点才能加上距离

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int maxn=500+10;
    ll ma[maxn][maxn],num[maxn],ans[maxn];
    int n,vis[maxn];
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                cin>>ma[i][j];
        for(int i=1;i<=n;i++)
            cin>>num[i];
        for(int i=n;i>=1;i--)
        {
            int v=num[i];
            vis[v]=1;
            for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
                ma[j][k]=min(ma[j][k],ma[j][v]+ma[v][k]);
            for(int j=1;j<=n;j++)
                for(int k=1;k<=n;k++)
                    if(vis[j]&&vis[k]&&j!=k)ans[i]+=ma[j][k];
        }
        for(int i=1;i<=n;i++)
            cout<<ans[i]<<" ";
        cout<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    MyEclipse添加SVN插件
    Postgresql的character varying = bytea问题
    Hibernate主键增加方式
    java配置环境变量
    Maven常用构建命令
    Postgresql的主键自增长
    js判断金额
    最精简的SQL教程
    SQL练习1:统计班级男女生人数
    sql 百万级数据库优化方案
  • 原文地址:https://www.cnblogs.com/carcar/p/9939576.html
Copyright © 2020-2023  润新知