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 ...
随机推荐
- vue封装一个弹框组件
这是一个提示框和对话框,例: 这是一个组件 eject.vue <template> <div class='kz-cont' v-show='showstate'> &l ...
- HDOJ-6641(欧几里得+异或运算)
TDL HDOJ-6641 关于题意,就是要找出符合f的第m大的数,而且后面还要满足异或等式. 通过观察题目,可以发现n太大了,所以不能直接枚举.当然因为m比较小,所以可以转换思路k^n,这个数最大不 ...
- MySql学习---数据库基本类型,事务,多表查询
数据库分类 关系型数据库 行列, 列如Mysql,oracle 通过表和表之间,行和列之间的关系进行数据的存储 非关系型数据库: Redis,MongDb 以对象存储,同过对象的自身属性来决定 表与表 ...
- WPF 基础 - 事件
1. 前言 WPF 事件的路由环境是 UI 组件树,先来看看这棵树. 1.1 Logical Tree 和 Visual Tree WPF 中的树有两种,一颗是逻辑树,另一颗也是逻辑树. 开玩笑,WP ...
- Java volatile关键字详解
Java volatile关键字详解 volatile是java中的一个关键字,用于修饰变量.被此关键修饰的变量可以禁止对此变量操作的指令进行重排,还有保持内存的可见性. 简言之它的作用就是: 禁止指 ...
- python基础学习之简化占位符和格式化的概念
简化版占位符有哪些? %s 字符串占位符,代表该位置有一个字符串待替换(万能) %d 数字占位符,代表该位置有一个数字待替换 %f 同上,这里是浮点数,float[默认保留6位小数] % ...
- Python基础【while循环】
Python基础[while循环] 1.while循环: 格式 while 条件: ...... print(......) 注意,在while语句也可以嵌套else,但是else不执行循环,执行后直 ...
- 杨辉三角的实现(Java)
杨辉三角的实现 一.什么是杨辉三角 杨辉三角是二项式系数在三角形中的一种几何排列.每个数等于它上方两数之和.每行数字左右对称,由1开始逐渐变大.第n行的数字有n项.前n行共[(1+n)n]/2 个数. ...
- springboot源码解析-管中窥豹系列之bean如何生成?(十四)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- Oment++ 初学者教程 第4节-将其转变为真实网络
4.1两个以上的节点 现在,我们将迈出一大步:创建几个tic模块并将它们连接到网络中.现在,我们将使它们的工作变得简单:一个节点生成一条消息,其他节点继续沿随机方向扔消息,直到它到达预定的目标节点为止 ...