• 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;

    }

  • 相关阅读:
    Objective--C三大特性:封装,继承,多态(零碎笔记)
    零碎的知识点
    Objective--C之《文件操作》练习代码
    Objective--C的Foundation frame之NSMutableDictionary代码
    Objective--C的Foundation frame之NSMutableArray代码
    Objective--C随笔2016年8月7日
    关于OC中的委托delegate
    javascript 绝对路径工具类
    IE 弹出框处理经验
    InputStream和OutputStream 何时使用
  • 原文地址:https://www.cnblogs.com/philippica/p/4064446.html
Copyright © 2020-2023  润新知