洛谷 2868 [USACO07DEC]观光奶牛Sightseeing Cows
一句话题意
L个点,P条有向边,求图中最大比率环(权值(Fun)与长度(Tim)的比率最大的环)。
Solution
巨说这是0/1分数规划。
话说 0/1分数规划 是真的难,但貌似有一些规律,总是离不开一个二分和带mid的不等式。
记环S=({vi},{ei}), 其中{vi}为环上结点的集合,{ei}为环上的边的集合
我们先分析一波公式:不过是要求\(\sum_{i=1}^{t}Fun[v[i]]/\sum_{i=1}^{t}Tim[e[i]]>mid\) 最小
不难想到要二分一个mid然后判定图上是否存在一个环S
使得
\]
也相当于判断
\]
因为每个点有许多条出边,这样很难处理,但是每条边都只有一个连向的点,所以我们把左右两边都乘以-1,将对点的处理转变成对边的处理:
\]
那么思路便很明显了,对于每一个二分出来的mid,都跑一遍SPFA,而边权就是 mid*长度-连向点的点权,若有负环则L=mid,否则R=mid, 直到达到精度要求。
Coding
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4;
int vis[N],num[N],cnt,head[N],n,m;
double f[N],dis[N];
struct road
{
int to,next;
double t;
}e[N*10];
void add(int x,int y,double w)
{
cnt++;
e[cnt].to=y;
e[cnt].next=head[x];
e[cnt].t=w;
head[x]=cnt;
}
bool check(double mid)
{
queue<int> q;
for(int i=1;i<=n;++i)
{
q.push(i);
dis[i]=0; vis[i]=num[i]=1;
}
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(dis[v]>dis[u]+mid*e[i].t-f[u])
{
dis[v]=dis[u]+mid*e[i].t-f[u];
if(!vis[v])
{
q.push(v);
vis[v]=1;
num[v]++;
if(num[v]>=n) return 1;
}
}
}
}
return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>f[i];
for(int i=1;i<=m;i++)
{
int x,y;
double w;
cin>>x>>y>>w;
add(x,y,w);
}
double mid,l=0,r=1000;
while(r-l>0.0001)
{
mid=(l+r)/2;
//printf("%lf %lf\n",l,r);
if(check(mid)) l=mid;
else r=mid;
}
printf("%.2lf",l);
return 0;
}
洛谷 2868 [USACO07DEC]观光奶牛Sightseeing Cows的更多相关文章
- POJ3621或洛谷2868 [USACO07DEC]观光奶牛Sightseeing Cows
一道\(0/1\)分数规划+负环 POJ原题链接 洛谷原题链接 显然是\(0/1\)分数规划问题. 二分答案,设二分值为\(mid\). 然后对二分进行判断,我们建立新图,没有点权,设当前有向边为\( ...
- 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题目描述 Farmer John has decided to reward his cows for their har ...
- 洛谷P2868 [USACO07DEC]观光奶牛 Sightseeing Cows
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- 洛谷 P2868 [USACO07DEC]观光奶牛Sightseeing Cows
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows(01分数规划)
题意 题目链接 Sol 复习一下01分数规划 设\(a_i\)为点权,\(b_i\)为边权,我们要最大化\(\sum \frac{a_i}{b_i}\).可以二分一个答案\(k\),我们需要检查\(\ ...
- 洛谷 P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题解
题面 这道题是一道标准的01分数规划: 但是有一些细节可以优化: 不难想到要二分一个mid然后判定图上是否存在一个环S,该环是否满足∑i=1t(Fun[vi]−mid∗Tim[ei])>0 但是 ...
- Luogu 2868 [USACO07DEC]观光奶牛Sightseeing Cows
01分数规划复习. 这东西有一个名字叫做最优比率环. 首先这个答案具有单调性,我们考虑如何检验. 设$\frac{\sum_{i = 1}^{n}F_i}{\sum_{i = 1}^{n}T_i} = ...
- P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows [](https://www.cnblogs.com/images/cnblogs_com/Tony-Double-Sky ...
- [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
随机推荐
- SecureCRT双击Tab快速复制Session
- String、Stringbuffer和Stringbuilder之间的区别
关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.在执行速度方面:Stringbuilder>Stringbuffer&g ...
- iOS5可能会删除本地文件储存
文/ Nick (iphoneincubator) 关于iOS 5的本地文件储存Marco(Instapaper 的开发者)写过一篇很好的帖子阐述过相关问题,有兴趣的同学可以先阅读下他的文章然后再看下 ...
- Scut游戏服务器引擎6.0.5.2发布
1. 增加C#脚本中能引用多个C#脚本文件的支持2. 修正Web应用程序中使用C#脚本解析不到Bin目录的问题
- flash+xml无法显示中文的解决办法
flash+xml用来做图片动态浏览效果相当不错,被广泛运用于电子相册制作,很多朋友都会从网上下载一些相关的flash源码下载参考,但是经常发现在使用过程中,修改了xml文件中的英文后要么文本不显示, ...
- 地图之CLLocationManager的使用 定位功能使用
1.iOS8曾经使用CLLocationManager 1.导入头文件 <CoreLocation/CoreLocation.h> 2.创建位置管理者 CLLocationManager ...
- 【Android】内存卡图片读取器,图库app
上一篇<[Android]读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示>(点击打开链接)在真机上測试非常有问题.常常遇到内存溢出.卡死的情况.由于如今真机上的内存上,2G ...
- android位置布局
fill_parent 设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间.这跟Windows控件的dockstyle属性大体一致.设置一个顶部布局或控件为 ...
- android开发笔记之fastboot的使用
fastboot命令大全 在终端中.我们输入: fastboot 对于这些命令.我不解释,慢慢使用.慢慢的就会明确是怎么回事了. android分区 分区 作用 splash1 开机画面.使用Nand ...
- spring学习六----------Bean的配置之Aware接口
© 版权声明:本文为博主原创文章,转载请注明出处 Aware Spring提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化后,可以获取相应的资源 通过Aware接口,可以对S ...