POJ 3621 最优比率生成环
题意:
让你求出一个最优比率生成环。
思路:
又是一个01分化基础题目,直接在jude的时候找出一个sigma(d[i] * x[i])大于等于0的环就行了,我是用SPFA跑最长路判断的环,这里注意一点就是刚开始的时候吧每个点都入队,还有提醒一个盲区,就是有的人认为SPFA处理不了等于0的环,其实我们不用担心这个问题,因为最外层我们用的是二分,二分永远是找接近值,就算有等于0的时候,spfa虽然找不到0.0000000 但是他可以找到0.0000000123 保留两位不还是0.00吗。
自己总结的01分数规划:
http://blog.csdn.net/u013761036/article/details/26666261
#include<stdio.h>
#include<string.h>
#include<queue>
#define N_node 1000 + 10
#define N_edge 5000 + 50
#define INF 1000000000
#define eps 0.000001
using namespace std;
typedef struct
{
int to ,next;
double cost;
}STAR;
STAR E[N_edge];
int list[N_node] ,tot;
double s_x[N_node];
double hap[N_node];
void add(int a ,int b ,double c)
{
E[++tot].to = b;
E[tot].cost = c;
E[tot].next = list[a];
list[a] = tot;
}
bool SPFA(int n ,double L)
{
int mark[N_node];
int in[N_node];
queue<int>q;
for(int i = 1 ;i <= n ;i ++)
{
mark[i] = in[i] = 1;
s_x[i] = 0;
q.push(i);
}
while(!q.empty())
{
int xin ,tou;
tou = q.front();
q.pop();
mark[tou] = 0;
for(int k = list[tou] ;k ;k = E[k].next)
{
xin = E[k].to;
double cost = hap[tou] - L * E[k].cost;
if(s_x[xin] < s_x[tou] + cost)
{
s_x[xin] = s_x[tou] + cost;
if(++in[xin] > n) return 1;
if(!mark[xin])
{
mark[xin] = 1;
q.push(xin);
}
}
}
}
return 0;
}
int main ()
{
int n ,m ,i;
int a ,b;
double c;
while(~scanf("%d %d" ,&n ,&m))
{
for(i = 1 ;i <= n ;i ++)
scanf("%lf" ,&hap[i]);
memset(list ,0 ,sizeof(list));
tot = 1;
for(i = 1 ;i <= m ;i ++)
{
scanf("%d %d %lf" ,&a ,&b ,&c);
add(a ,b ,c);
}
double low ,mid ,up ,ans;
ans = low = 0;
up = INF;
while(up - low >= eps)
{
mid = (low + up) / 2;
if(SPFA(n ,mid))
ans = low = mid;
else up = mid;
}
printf("%.2f\n" ,ans);
}
return 0;
}
POJ 3621 最优比率生成环的更多相关文章
- poj 3621最优比例生成环(01分数规划问题)
/* 和求最小生成树差不多 转载思路:http://www.cnblogs.com/wally/p/3228171.html 思路:之前做过最小比率生成树,也是属于0/1整数划分问题,这次碰到这道最优 ...
- poj 3621(最优比率环)
题目链接:http://poj.org/problem?id=3621 思路:之前做过最小比率生成树,也是属于0/1整数划分问题,这次碰到这道最优比率环,很是熟悉,可惜精度没控制好,要不就是wa,要不 ...
- poj 3621(最优比率环)
Sightseeing Cows Farmer John has decided to reward his cows for their hard work by taking them on a ...
- poj 3621 0/1分数规划求最优比率生成环
思路:以val[u]-ans*edge[i].len最为边权,判断是否有正环存在,若有,那么就是ans小了.否则就是大了. 在spfa判环时,先将所有点进队列. #include<iostrea ...
- POJ 3621-Sightseeing Cows-最优比率环|SPFA+二分
最优比率环问题.二分答案,对于每一个mid,把节点的happy值归类到边上. 对于每条边,用mid×weight减去happy值,如果不存在负环,说明还可以更大. /*---------------- ...
- 最优比例生成环(dfs判正环或spfa判负环)
http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- poj 2728 最优比率生成树
思路:设sum(cost[i])/sum(dis[i])=r;那么要使r最小,也就是minsum(cost[i]-r*dis[i]);那么就以cost[i]-r*dis[i]为边权重新建边.当求和使得 ...
- 01分数规划POJ3621(最优比例生成环)
Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8218 Accepted: 2756 ...
- Desert King (poj 2728 最优比率生成树 0-1分数规划)
Language: Default Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22113 A ...
随机推荐
- FreeBSD ports 多线程编译
FreeBSD ports 多线程编译FORCE_MAKE_JOBS=yesMAKE_JOBS_NUMBER=4写入/etc/make.conf没有就新建.4是处理器核心数,不知道就别改.
- Ubuntu更换python默认版本
设置python版本: 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 2 sudo ...
- 前端性能监控之performance
如果我们想要对一个网页进行性能监控,那么使用window.performance是一个比较好的选择. 我们通过window.performance可以获取到用户访问一个页面的每个阶段的精确时间,从而对 ...
- 扩展欧几里得算法(EXGCD)学习笔记
0.前言 相信大家对于欧几里得算法都已经很熟悉了.再学习数论的过程中,我们会用到扩展欧几里得算法(exgcd),大家一定也了解过.这是本蒟蒻在学习扩展欧几里得算法过程中的思考与探索过程. 1.Bézo ...
- python-3-1
一.布尔类型 布尔值为: True 和Flase 注:区分大小写,如果写true 和false 不代表布尔类型值 小于 大于 小于等于 大于等于 对应这些判断 一般就是用布尔类型进行判断 ...
- 高仿京东到家APP引导页炫酷动画效果
前言 京东到家APP的引导页做的可圈可点,插画+动效,简明生动地说明了APP最吸引用户的几个亮点(商品多,价格低,配送快...).本文主要分析拆解这些动画效果,并完成一个高仿Demo,完整的Demo代 ...
- Spring工程搭建
创建Maven项目 1.下载Maven资源包 http://maven.apache.org/download.cgi 2.打开IDEA创建Maven项目 在新建项目窗口选择Maven项目:检查当前S ...
- noip初赛复习总纲
初赛复习总纲 目录 初赛复习总纲 计算机发展史 计算机的分类 计算机的应用 操作系统盘点 计算机的基本结构 中央处理器(**CPU**--**Central Processing Unit**) 存储 ...
- java面试-内存分配与回收策略
1.对象优先在Eden分配 -Xms20M -Xmx20M java堆的大小20M -Xmn10M 新生代10M 老年代10M -XX:SurvivorRatio=8 新生代Eden与一个Surviv ...
- [Azure DevOps] 如何安装并配置 Build Agent
1. 编译服务器 在 Azure Pipelines 中至少需要一个编译服务器的 Agent 才能编译代码或发布软件.Azure DevOps 本身已经提供了一个 Agent,但出于各种理由(需要特殊 ...