poj 3621 0/1分数规划求最优比率生成环
思路:以val[u]-ans*edge[i].len最为边权,判断是否有正环存在,若有,那么就是ans小了。否则就是大了。
在spfa判环时,先将所有点进队列。
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#define Maxn 1010
#define Maxm 6000
#define inf 1e10
#define eps 1e-4
using namespace std;
int vi[Maxn];
struct Edge{
int u,v,next;
double len;
}edge[Maxm];
double dis[Maxn],val[Maxn];
int head[Maxn],e,n,cnt[Maxn];
void add(int u,int v,double len)
{
edge[e].u=u,edge[e].v=v,edge[e].len=len,edge[e].next=head[u],head[u]=e++;
}
void init()
{
e=;
memset(vi,,sizeof(vi));
memset(cnt,,sizeof(cnt));
memset(head,-,sizeof(head));
}
int spfa(double ans)
{
int i,j,v,u;
queue<int> q;
memset(cnt,,sizeof(cnt));
for(i=;i<=n;i++){
dis[i]=;
q.push(i);
vi[i]=;
}
while(!q.empty()){
int u=q.front();
cnt[u]++;
q.pop();
vi[u]=;
for(i=head[u];i!=-;i=edge[i].next){
v=edge[i].v;
double d=val[u]-ans*edge[i].len;
if(dis[v]<dis[u]+d){
dis[v]=dis[u]+d;
cnt[v]++;
if(cnt[v]>=n) return ;
if(!vi[v]){
q.push(v);
vi[v]=;
}
}
}
}
return ;
}
int main()
{
int i,j,a,b,m;
double c;
while(scanf("%d%d",&n,&m)!=EOF){
init();
for(i=;i<=n;i++)
scanf("%lf",val+i);
for(i=;i<=m;i++){
scanf("%d%d%lf",&a,&b,&c);
add(a,b,c);
}
double l=,r=,mid;
while(r-l>eps){
mid=(l+r)/;
if(spfa(mid))
l=mid;
else
r=mid;
}
printf("%.2lf\n",l);
}
return ;
}
poj 3621 0/1分数规划求最优比率生成环的更多相关文章
- POJ 3621 最优比率生成环
题意: 让你求出一个最优比率生成环. 思路: 又是一个01分化基础题目,直接在jude的时候找出一个sigma(d[i] * x[i])大于等于0的环就行了,我是用SPFA跑最长路 ...
- POJ 2728 Desert King 01分数规划,最优比率生成树
一个完全图,每两个点之间的cost是海拔差距的绝对值,长度是平面欧式距离, 让你找到一棵生成树,使得树边的的cost的和/距离的和,比例最小 然后就是最优比例生成树,也就是01规划裸题 看这一发:ht ...
- POJ - 2976 Dropping tests && 0/1 分数规划
POJ - 2976 Dropping tests 你有 \(n\) 次考试成绩, 定义考试平均成绩为 \[\frac{\sum_{i = 1}^{n} a_{i}}{\sum_{i = 1}^{n} ...
- POJ 2976 Dropping tests【0/1分数规划模板】
传送门:http://poj.org/problem?id=2976 题意:给出组和,去掉对数据,使得的总和除以的总和最大. 思路:0/1分数规划 设,则(其中等于0或1) 开始假设使得上式成立,将从 ...
- poj 2976 Dropping tests 0/1分数规划
0/1分数规划问题,用二分解决!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> # ...
- LOJ 3089 「BJOI2019」奥术神杖——AC自动机DP+0/1分数规划
题目:https://loj.ac/problem/3089 没想到把根号之类的求对数变成算数平均值.写了个只能得15分的暴力. #include<cstdio> #include< ...
- poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】
含[最小生成树Prim]模板. Prim复杂度为$O(n^2),适用于稠密图,特别是完全图的最小生成树的求解. Desert King Time Limit: 3000MS Memory Li ...
- [SDOI2017]新生舞会 0/1分数规划
---题面--- 题解: 0/1分数规划,,,但是竟然有诡异的精度问题???因为这个被卡了好久 中途还写过一次KM,,,结果陷入死循环,,,我大概是写了一个假KM,,,于是放弃KM,回来调费用流 这个 ...
- Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)
题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...
随机推荐
- Windows操作系统单文件夹下到底能存放多少文件及单文件的最大容量
本文是转自:http://hi.baidu.com/aqgjoypubihoqxr/item/c896921f8c2eaba5feded5f2 最近需要了解Windows中单个文件夹下 ...
- Spring AOP 实现原理
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- MES总结:CBF.Common 文件Net下的有类型转换
MES总结:CBF.Common 文件Net下的有类型转换. using System.Text;using System.Data;using System.ComponentModel;using ...
- Oracle 触发器在日志管理开发中的应用
摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; ...
- HDU 4637 Rain on your Fat brother 线段与半圆和线段交 简单题
题意: 应该不难读懂. 做法: 我们可以把雨滴看做静止不动,然后maze(这题的那个人)就是往左上方运动就可以了,计算出maze能跑到的最远的点,然后就是求起点和终点所构成的线段与每个雨滴交的时间,注 ...
- yum命令的使用
yum源的配置,请参考此文:RedHatLinux 本地yum源的配置.本文讲解如何使用yum命令. [root@serv01 ~]# yum --help Loaded plugins: produ ...
- 获取oracle 表字段,表名,以及主键之类等等的信息
数据库版本号:select * from v$version 数据库名:select * from v$instance 注意: 我在C#项目中查询语句的时候报“ORA-00911: 无效字符” 的错 ...
- Slony-I 文摘
http://www.onlamp.com/pub/a/onlamp/2004/11/18/slony.html 我特别喜欢这篇文章,就进行了转载和翻译. Introducing Slony by ...
- UVALive 4221 Walk in the Park 扫描线
Walk in the Park 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemi ...
- wget 命令用法详解
wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能和特点:(1)支持断点下传功能:这一点,也是网络蚂蚁和Fl ...