zoukankan      html  css  js  c++  java
  • BZOJ 1491 [NOI2007]社交网络

    暴力。 跑 floyd一边算最短路一边统计条数,然后暴力问一遍每个点。

    //Twenty
    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<queue>
    #include<vector>
    using namespace std;
    const int maxn=4500*2+299;
    int x,y,n,m;
    typedef long long LL;
    LL dis[105][105],f[105][105],z;
    double ans[105];
    int main() {
        scanf("%d%d",&n,&m);
        memset(dis,127/3,sizeof(dis));
        for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=1;
        for(int i=1;i<=m;i++) {
            scanf("%d%d%lld",&x,&y,&z);
            dis[x][y]=dis[y][x]=min(dis[x][y],z);
            f[x][y]=f[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(i!=j&&i!=k&&j!=k) {
                        if(dis[i][j]>dis[i][k]+dis[k][j]) {
                            dis[i][j]=dis[i][k]+dis[k][j];
                            f[i][j]=f[i][k]*f[k][j];
                        }
                        else if(dis[i][j]==dis[i][k]+dis[k][j]) {
                             f[i][j]+=f[i][k]*f[k][j];
                        }
                    }
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=n;j++)
                for(int k=1;k<=n;k++) 
                if(i!=j&&i!=k&&k!=j) {
                   if(dis[i][j]+dis[i][k]==dis[j][k]) 
                       ans[i]+=(double)f[i][j]*f[i][k]/(double)f[j][k];
                }
        }
        for(int i=1;i<=n;i++)
         printf("%.3lf
    ",ans[i]);
        return 0;
    }
    View Code
  • 相关阅读:
    禁止google浏览器强制跳转为https
    遍历打印文件目录结构
    添加忽略文件
    部署git服务器
    Location, History, Screen, Navigator对象
    Window 对象
    回调函数,setTimeout,Promise
    闭包
    this
    函数内部运作机制—上下文
  • 原文地址:https://www.cnblogs.com/Achenchen/p/7517814.html
Copyright © 2011-2022 走看看