zoukankan      html  css  js  c++  java
  • 最小圈

    https://loj.ac/problem/10084

    题目描述

      给出一张图,求图上的一个环使这条环的平均长度最小。

    思路

      这道题其实和Word Rings相同,只是已经给出图了,直接在图上跑dfs即可。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    const int N=3300,M=1e4+10;
    const double eps=1e-10;
    int nxt[M],to[M],tot,head[N];
    int vis[N],n,f;
    double dis[N],w[M];
    void add_edge(int x,int y,double v)
    {
        nxt[++tot]=head[x];
        head[x]=tot;
        to[tot]=y;
        w[tot]=v;
    }
    void spfa(int u,int st,double aver)
    {
        if(f)return ;
        vis[u]=st;
        for(int i=head[u];~i;i=nxt[i])
        {
            int v=to[i];
    //        cout<<v<<' '<<i<<endl;
            if(dis[u]+w[i]-aver<dis[v])
            {
                dis[v]=dis[u]+w[i]-aver;
                if(!vis[v])spfa(v,st,aver);
                if(vis[v]==st){f=1;return ;}
            }
        }
        vis[u]=0;
    }
    bool check(double aver)
    {
        memset(dis,0,sizeof(dis));
        memset(vis,0,sizeof(vis));
        f=0;
        for(int i=1;i<=n;i++)
        {
            spfa(i,i,aver);
            if(f)break ;
        }
        return f;
    }
    int main() 
    {
        memset(head,-1,sizeof(head));
        int m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            int x,y;double z;
            scanf("%d%d%lf",&x,&y,&z);
            add_edge(x,y,z);
        }
    //    for(int i=1;i<=tot;i++)
    //        printf("%lf
    ",w[i]);
        double l=-10000000,r=10000000,ans;
        while(r-l>eps)
        {
    //        cout<<l<<' '<<r<<endl;
            double mid=(r+l)/2;
            if(check(mid))ans=mid,r=mid;
            else l=mid;
        }
        printf("%.8lf",ans);
        return 0;
    }
  • 相关阅读:
    如何设计一个百万级用户的抽奖系统?
    服务注册发现
    消息列队7
    消息列队6
    bzoj 4771: 七彩树
    [SDOI2013]刺客信条
    bzoj 5291: [Bjoi2018]链上二次求和
    51nod 1245 Binomial Coefficients Revenge
    bzoj 5308: [Zjoi2018]胖
    bzoj 5294: [Bjoi2018]二进制
  • 原文地址:https://www.cnblogs.com/fangbozhen/p/11708669.html
Copyright © 2011-2022 走看看