zoukankan      html  css  js  c++  java
  • POJ3621 Sightseeing Cows【最短路】

    题目大意:在一个无向图里找一个环,是的点权和除以边权和最大

    思路:UVA11090姊妹题 事实上当这题点权和都为1时就是上一题TUT

    #include <stdio.h>

    #include <iostream>

    #include<queue>

    #include <string.h>

    #include <algorithm>

    #define maxn 10009

    #define maxm 10001

    #define esp 0.001

    using namespace std;

    int head[1009],next[maxn],now=0,value1[maxn];

    int point[maxn],inque[1009],n,m,f[1009];

    double dist[1009];

    void add(int x,int y,int u,int v)

    {

        next[++now]=head[x];

        head[x]=now;

        point[now]=y;

        value1[now]=u;

    }

    int spfa(int s,double ans)

    {

        memset(inque,0,sizeof(inque));

        for(int i=1;i<=n+1;i++)dist[i]=0x3f3f3f3f;

        dist[s]=0;

        int visit[maxn]={0};

        visit[s]=1;

        queue<int>q;

        q.push(s);

        while(!q.empty())

        {

            int u=q.front();

            q.pop();

            visit[u]=0;

            for(int i=head[u];i;i=next[i])

            {

                int k=point[i];

                double vv=ans*value1[i]-f[k];;

                if(dist[u]+vv<dist[k])

                {

                    dist[k]=dist[u]+vv;

                    if(visit[k]==0)

                    {

                        visit[k]=1;

                        inque[k]++;

                        if(inque[k]>=n)return 1;

                        q.push(k);

                    }

                }

            }

        }

        return 0;

    }

    int main()

    {

        double l=0,r=2000;

        int x,y,v;

        scanf("%d%d",&n,&m);

        for(int i=1;i<=n;i++)

        {

        //    add(n+1,i,0,0);

            scanf("%d",&f[i]);

        }

        for(int i=1;i<=m;i++)

        {

            scanf("%d%d%d",&x,&y,&v);

            add(x,y,v,f[y]);

          //  add(y,x,v,f[x]);

          //  r+=v;

        }

        while(r-l>esp)

        {

            double mid=(l+r)/2;

            if(spfa(1,mid)==0)r=mid;else l=mid;

        }

     //   printf("%d ",spfa(1,6.128));

        printf("%.2f ",l);

        return 0;

    }

  • 相关阅读:
    python中拆分和拼接字符串
    python中find查找是否包含特定字符并返回第一个索引
    python中删除字符串左右的空格
    python中指定字符串宽度,并指定填充字符串
    python中将字符串中的制表符转换为空格
    python中统计字符串中特定字符出现的次数,内置方法count
    python中指定分隔符分割字符串,返回三元组
    学习笔记:社会科学的特质
    启示——来自《DOOM启世录》
    多语言处理 > UNICODE > IBM的ICU类库
  • 原文地址:https://www.cnblogs.com/philippica/p/4064446.html
Copyright © 2011-2022 走看看