zoukankan      html  css  js  c++  java
  • 社交网络-最短路统计

    分析:题目比较繁琐,提取完有用信息之后就是一个最短路统计。唯一的难点是经过点v的最短路统计。我们可以转换成C(s,v)*C(v,t)

    代码如下:

    #include<stdio.h>
    #define inf 100000001
    double f[101][101];
    double g[101][101];
    double min(double x,double y){return x<y?x:y;}
    double max(double x,double y){return x>y?x:y;}
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);    
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(i!=j)
                f[i][j]=inf;
            }
        }
        for(int i=1;i<=m;i++)
        {
            int x,y;
            double z;
            scanf("%d%d%lf",&x,&y,&z);
            if(x==y)
            continue;
            f[x][y]=min(f[x][y],z);
            f[y][x]=min(f[y][x],z);
            g[x][y]=g[y][x]=1;
        }
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                {
                    if(f[i][j]>f[i][k]+f[k][j])
                    {
                    f[i][j]=f[i][k]+f[k][j];
                    g[i][j]=g[i][k]*g[k][j];
                    continue;
                    }
                    if(f[i][j]==f[i][k]+f[k][j])
                    g[i][j]+=g[i][k]*g[k][j];
                }     
    
            for(int v=1;v<=n;v++)
            {
                double sum=0;
                for(int s=1;s<=n;s++)
                    for(int t=1;t<=n;t++)
                        {
                            if(v==s||v==t||s==t)
                            continue;
                            if(f[s][v]+f[v][t]==f[s][t])
                            sum+=(1.0*g[s][v]*g[v][t])/g[s][t];
                        }
                         
                printf("%.3lf
    ",sum);
            }
    }
     
  • 相关阅读:
    hdu 1257 贪心
    hdu 4301 简单DP
    hdu 4221 贪心
    hdu 4223 排序
    hdu 4217 树状数组+二分搜索
    hdu 2899
    hdu 1312
    hdu 1258
    hdu 3276
    hdu 3274
  • 原文地址:https://www.cnblogs.com/Marcelo/p/13500579.html
Copyright © 2011-2022 走看看