[HNOI2009]最小圈 分数规划 spfa判负环

题面

思路难,代码简单。

题目求圈上最小平均值,问题可看为一个0/1规划问题,每个边有\(a[i],b[i]\)两个属性,\(a[i]=w(u,v),b[i]=1\),问题转化为\(min(\frac{\sum^{k}_{i=1}a[i]}{\sum^{k}_{j=1}b[j]})\)

分数规划考虑二分答案,当前\(mid\)可能为答案当且仅当:

\[\frac{\sum^{k}_{i=1}a[i]}{\sum^{k}_{j=1}b[j]} < mid
\]

化简即为判定:

\[\sum{}^{k}_{i=1} (a[i]-mid)<0
\]

每次二分答案时,将图中所有边权\(a[i]​\)视为\(a[i]-mid​\),此时问题转换为一个\(spfa​\)判负环问题,考虑使用\(dfs​\)优化的\(spfa​\)

AC Code:

#include <cstdio>
#include <cstring>
#define MAXN 3003
#define MAXM 10010
using namespace std;
int head[MAXN],nxt[MAXM],vv[MAXM],tot;
double ww[MAXM];
inline void add_edge(int u, int v, double w){
vv[++tot]=v;
ww[tot]=w;
nxt[tot]=head[u];
head[u]=tot;
}
double dis[MAXN];
bool vis[MAXN];
bool spfa(int u, double mid){
vis[u]=1;
for(register int i=head[u];i;i=nxt[i]){
int v=vv[i];double w=ww[i]-mid;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
if(vis[v]) return 1;
if(spfa(v,mid)) return 1;
}
}
vis[u]=0;
return 0;
}
inline int read()
{
int s=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-')f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){s=(s<<3)+(s<<1)+ch-'0';ch=getchar();}
return s*f;
}
int n,m;
int main()
{
n=read(),m=read();
while(m--){
int a,b;double w;a=read(),b=read();scanf("%lf", &w);
add_edge(a,b,w);
}
double l=-1e7,r=1e7,mid;
while(r-l>1e-10){
mid=(l+r)/2;
memset(dis, 0, sizeof(dis));
memset(vis, 0, sizeof(vis));
bool isOK=0;
for(register int i=1;i<=n;++i)
if(spfa(i,mid)){
isOK=1;break;
}
if(isOK) r=mid;
else l=mid;
}
printf("%.8lf", mid);
return 0;
}

最新文章

  1. python之最强王者(5)——Nunber(数字)
  2. MySQL5.7 新增配置
  3. 过滤器Filter
  4. The Entity Framework provider type &#39;System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer&#39; registered in the application config file for the ADO.NET provider with invariant name
  5. 9款经典华丽的CSS3分享按钮
  6. VPN怎么连?
  7. Introduction to neural network —— 该“神经网络” 下拉“祭坛”
  8. 常用IO按位操作
  9. python3 第二十一章 - 函数式编程之return函数和闭包
  10. CSS实现网页背景图片自适应全屏
  11. JavaFile、递归、字节流、字符流整理
  12. Filebeat工作原理
  13. Linux中一个文件10行内容,如何输出5-8内容到屏幕
  14. 二十九、Linux 进程与信号——minishell(2)
  15. (32)forms组件(数据校验)
  16. laravel5.5 excel扩展包的安装和使用
  17. 分享一个使用 vue.js 开发的网站
  18. codeforces 11 B.Jumping Jack 想法题
  19. 013:Rank、视图、触发器、MySQL内建函数
  20. windows下用Eclipse连接大数据环境得hbase

热门文章

  1. (一)shiro简介和用户登录demo及角色管理
  2. 3D数学基础_图形与游戏开发
  3. 设计模式(四)——代理模式(Proxy)
  4. JSP JSONArray使用遇坑!添加以下6个jar包
  5. React/事件系统
  6. KVM之磁盘管理工具qemu-img小结
  7. SpringCloud之RabbitMQ消息队列原理及配置
  8. go语言的duck typing
  9. GNS3
  10. 熟记这些python内置函数,你离大佬就不远了