zoukankan      html  css  js  c++  java
  • NOI2007 社交网络

    题目链接:戳我

    就是在floyd计算dis的时候,顺便把两点之间最短路的个数也计算了qwqwq

    (sum[i][j]=sum sum[i][k]*sum[k][j])

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define MAXN 310
    using namespace std;
    int n,m;
    long long dis[MAXN][MAXN],sum[MAXN][MAXN];
    double ans[MAXN];
    int main()
    {
        #ifndef ONLINE_JUDGE
        freopen("ce.in","r",stdin);
        #endif
        scanf("%d%d",&n,&m);
        memset(dis,0x3f,sizeof(dis));
        for(int i=1;i<=m;i++)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            dis[u][v]=dis[v][u]=w;
            sum[u][v]=sum[v][u]=1;
        }
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                {
                    if(dis[i][j]>dis[i][k]+dis[k][j])
                        dis[i][j]=dis[i][k]+dis[k][j],sum[i][j]=sum[i][k]*sum[k][j];
                    else if(dis[i][j]==dis[i][k]+dis[k][j])
                        sum[i][j]+=sum[i][k]*sum[k][j];
                }
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                {
                    if((i==j)||(i==k)||(j==k)) continue;
                    if(dis[i][k]+dis[k][j]==dis[i][j])  
                        ans[k]+=1.0*sum[i][k]*sum[k][j]/sum[i][j];
                }
        for(int i=1;i<=n;i++) printf("%.3lf
    ",ans[i]);
        return 0;
    }
    

    BZOJ100题纪念!

  • 相关阅读:
    zoj1942Frogger
    阿里云api调用做简单的cmdb
    约瑟夫环
    Bag标签之中的一个行代码实行中文分词实例3
    用lua扩展你的Nginx(整理)
    Single Number III
    TCP/IP ---分层
    TCP/IP --概述
    adb命令学习
    How to set Selenium Python WebDriver default timeout?
  • 原文地址:https://www.cnblogs.com/fengxunling/p/10470240.html
Copyright © 2011-2022 走看看