Sightseeing Cows
给出一张图,点数为L,边数P,并给出边的边权\(\{b_i\}\),再给处每个点的点权,求一条起点和终点相同的路径,并使其点权之和除以边权之和最大,注意,路径中点权只能被计算一次,而边权可以重复计算, (2 ≤ L ≤ 1000), (2 ≤ P ≤ 5000)。
解
显然为分数规划问题,关键在点权与边权不对应上,于是自然的想法是点权移边权,而一条起点与终点相同的路径即一个联通分量,所以问题现在在于点权移边权后只对环成立,而不对联通分量成立,于是考虑证明联通分量对结果没有影响,于是设一个大环它的路径长\(b_1\),点权\(a_1\),一个小环路径长\(b_2\),点权\(a_2\),设他们是套在一起的环,所以会有重叠的地方。
不难得知,大环的比率为\(\frac{a_1}{b_1}\),小环比率\(\frac{a_2}{b_2}\),而套在一起的环比率仍按照不去点权算为\(\frac{a_1+a_2}{b_1+b_2}\),由分数三角不等式结论,我们知道\(\frac{a_1+a_2}{b_1+b_2}\leq max(\frac{a_1}{b_1},\frac{a_2}{b_2})\)
所以我们可以知道实际上环套环,即联通分量对结果没有影响,于是移点下边,接下来照着最优比率环的基本套路即可,但是注意此处要算出一个具体的比较大的ans很难做到,于是迭代就不能使用了,但是你的聪明才智或许能想到一种好的解决办法。
参考代码:
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#define il inline
#define ri register
#define exact 0.000001
using namespace std;
struct point{
int next,to,a,b;
double c;
}ar[5001];int at;
bool is[1001];
double dis[10001];
int f[1001],head[1001],n,
t1[4000001],tot[1001];
il bool check(double);
il double dfs(double,double);
il void link(int,int,int,int),read(int&);
int main(){
int m,i,j,k;
read(n),read(m);
for(i=1;i<=n;++i)read(f[i]);
while(m--)read(i),read(j),read(k),
link(i,j,f[j],k);
printf("%.2lf",dfs(0,100));
return 0;
}
il bool check(double x){
int i,h(0),t(0);
memset(is,0,sizeof(is)),memset(tot,0,sizeof(tot)),
memset(dis,0,sizeof(dis));
for(i=1;i<=n;++i)t1[++t]=i;
for(i=1;i<=at;++i)
ar[i].c=ar[i].b*x-ar[i].a;
while(h<t){
++h,is[t1[h]]|=true;
for(i=head[t1[h]];i;i=ar[i].next)
if(ar[i].c+dis[t1[h]]<dis[ar[i].to]){
dis[ar[i].to]=ar[i].c+dis[t1[h]];
if(is[ar[i].to]){
t1[++t]=ar[i].to,is[ar[i].to]&=false;
if(++tot[ar[i].to]>=n)return true;
}
}
}return false;
}
il double dfs(double l,double r){
double mid;
while(r-l>exact){
mid=(l+r)/2;
if(check(mid))l=mid+exact;
else r=mid-exact;
}return (l+r)/2;
}
il void read(int &x){
x&=0;ri char c;while(c=getchar(),c<'0'||c>'9');
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
}
il void link(int x,int y,int a,int b){
ar[++at].a=a,ar[at].b=b,ar[at].to=y;
ar[at].next=head[x],head[x]=at;
}
Sightseeing Cows的更多相关文章
- 【POJ3621】Sightseeing Cows
Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8331 Accepted: 2791 ...
- Sightseeing Cows(最优比率环)
Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8915 Accepted: 3000 ...
- P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows [](https://www.cnblogs.com/images/cnblogs_com/Tony-Double-Sky ...
- 【POJ3621】Sightseeing Cows 分数规划
[POJ3621]Sightseeing Cows 题意:在给定的一个图上寻找一个环路,使得总欢乐值(经过的点权值之和)/ 总时间(经过的边权值之和)最大. 题解:显然是分数规划,二分答案ans,将每 ...
- 【POJ3621】【洛谷2868】Sightseeing Cows(分数规划)
[POJ3621][洛谷2868]Sightseeing Cows(分数规划) 题面 Vjudge 洛谷 大意: 在有向图图中选出一个环,使得这个环的点权\(/\)边权最大 题解 分数规划 二分答案之 ...
- POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】
题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ 3621 Sightseeing Cows(最优比例环+SPFA检测)
Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10306 Accepted: 3519 ...
- 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题目描述 Farmer John has decided to reward his cows for their har ...
- POJ3621 Sightseeing Cows 最优比率环 二分法
题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total ...
- [USACO07DEC]Sightseeing Cows(负环,0/1分数规划)
[USACO07DEC]Sightseeing Cows Description Farmer John has decided to reward his cows for their hard w ...
随机推荐
- Python 爬虫-爬取京东手机页面的图片
具体代码如下: __author__ = 'Fred Zhao' import requests from bs4 import BeautifulSoup import os from urllib ...
- $nextTick与nextTick
$nextTick Data-Dom-之后回调 nextTick Data-回调-Dom
- c#种GetType()和TypeOf()的区别
C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型. typeof(x)中的x,必须是具体的类名.类型名称等,不可以是变量名称:GetType ...
- 2. Vim 概念扫盲
Frm: http://www.linuxidc.com/Linux/2013-05/84031p2.htm 了解Vim的三个基本模式 当我们安装完一个编辑器后,肯定会打开它,然后在里面输入点什么东西 ...
- windows域控导出hash
#mimikaz导入域内所有hash mimikatz.exe privilege::debug "lsadump::dcsync /domain:test.local /all /csv ...
- 502Bad Gateway
502 bad gateway,错误的网关的原因 连接超时,我们向服务器发送请求,由于服务器当前链接太多,导致服务器方面无法给予正常的响应,产生此报错,最好去服务器上找原因. 性能测试常见,可能是由于 ...
- SQL链接EXCEL操作
Sub CopyData_5() Set Cnn = CreateObject("ADODB.Connection")With Cnn.Provider = "micro ...
- dubbo重连机制会不会造成错误
dubbo在调用服务不成功时,默认会重试2次. Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以 dubbo的重试机器也能一定程度的保证服务的质量. 但是如果不合理的配置重试 ...
- VMware的使用-永久激活码
1.在软件管理中下载安装VMware 版本为14.0 试用期为30天 2.在网上找的永久破解码 VMware 2018 v14.x 永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWE ...
- [JZOJ1901] 【2010集训队出题】光棱坦克
题目 题目大意 给你个平面上的一堆点,问序列\({p_i}\)的个数. 满足\(y_{p_{i-1}}>y_{p_i}\)并且\(x_{p_i}\)在\(x_{p_i-1}\)和\(x_{p_i ...