【01规划】POJ 3621 Sightseeing Cows

2023-11-16

POJ 3621 Sightseeing Cows
在这里插入图片描述
在这里插入图片描述

题意:给定一张 n 个点、m 条边的有向图,每个点都有一个权值 f[i],每条边都有一个权值 t[i]。

求图中的一个环,使“环上各点的权值之和”除以“环上各边的权值之和”最大。

输出这个最大值。

思路:同样构造f(l), 令∑f[i] / ∑t[i] = l,那么∑f[i] = l*∑t[i] ,令f(l) = ∑(f[i] - l*t[i]) ,题目要求l尽可能大 ,也就是 ∑f[i] / ∑t[i] ≥ l 有更优解,也就是 f(l) ≥ 0 时有更优解,即∑(t[i]*l - f[i]) ≤ 0 有更优解,题目让求一个环,综上所述 如果存在更优解 说明这个图中存在负环,二分l ,通过是否存在负环判断边界
负环问题一般建议spfa来做,dalao: “spfa算法本身具有一个性质,就是在求解最短路的时候,是可以把点权和边权看做一个整体边权一起更新的,因此我们常常在一些spfa的图论问题中,把点权存入边权中进行计算。”
因此我们把边权换成t[i]*l - f[i]来存储,把每个点的权值存入他的出边中

#include  <map>
#include  <set>
#include  <cmath>
#include  <queue>
#include  <cstdio>
#include  <vector>
#include  <climits>
#include  <cstring>
#include  <cstdlib>
#include  <iostream>
#include  <algorithm>
using namespace std;
const int N=2e5+7;
int f[N];
int head[N],e[N],ne[N],w[N],idx=0;
void add(int a,int b,int c){
	e[idx]=b;
	w[idx]=c;
	ne[idx]=head[a];
	head[a]=idx++;
}
bool vis[N];
double dis[N];
int cnt[N],n,m;
int ok(double mid){
	memset(vis,false,sizeof vis);
	memset(cnt,0,sizeof cnt);
	memset(dis,0,sizeof dis);
	queue<int>q;
	for(int i=1;i<=n;i++){
		vis[i]=true;
		q.push(i);
	}
	while(q.size()){
		auto id=q.front();q.pop();
		vis[id]=false;
		for(int i=head[id];i!=-1;i=ne[i]){
			int j=e[i];
			double val=w[i]*mid-f[id];
			if(dis[j]>dis[id]+val){
				dis[j]=dis[id]+val;
				cnt[j]=cnt[id]+1;
				if(cnt[j]>=n) return true;
				if(!vis[j]){
					vis[j]=true;
					q.push(j);
				}
			}
		}
	}
	return false;
}
int main(){
	memset(head,-1,sizeof head);

	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>f[i]; 
	for(int i=1;i<=m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c); 
	}
	double l=1,r=1000;
	while(r-l>1e-4){
		double mid=(l+r)/2.;
		if(ok(mid)) l=mid;
		else r=mid;
	}
	printf("%.2lf\n",l);
	return 0;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【01规划】POJ 3621 Sightseeing Cows 的相关文章

  • CodeFun如期而至

    背景 将设计稿转代码是前端工程师日常不断重复的工作 这部分工作复杂度较低但工作占比较高 往往又比较枯燥繁琐 有时候开发迭代周期短 静态页面又多 常常让有些前端开发苦不堪言 那么 有没有一款设计稿自动生成代码的工具 减少前端工程师的工作量 提
  • node.js

    node js 关于报错及解决方案 问题一 问题二 问题三 一 Node js基础 1 认识Node js 2 开发环境搭建 3 模块 包 commonJS 4 Npm Yarn 5 内置模块 6 路由 二 Express 1 特色 2 安

随机推荐

  • hadoop 学习笔记

    基于hadoop的贝叶斯文本分类器实现过程 贝叶斯基础理论 这个东西的项目概览 对这个工程总体的流程可以参考这个文献里面的做法即可 参考文献1 远程原件目录 user coderlau input hadoop文件系统命令行主要是hdfs
  • android 电视安装apk文件夹,智能电视无法识别apk文件怎么办?简单几招教你搞定...

    在双十一购买完智能电视后 安装自己喜欢的软件 或许是在正常不过的事情了 但有时候我们会碰到一些APK无法识别 这个时候还以为会认为自己买的是假货 但实际上 这并不是电视的问题 而今天小编就教大家 一旦碰倒APK无法识别时应该如何解决 帮助你
  • 常用语言单元测试框架入门

    本文主要介绍Python java go C OC常用单元测试框架 用于了解各种语言单测 一 python单元测试Pytest 1 Pytest主要功能 pytest是python的一种单元测试框架 同自带的Unittest测试框架类似 相
  • 2023 最新互联网大厂Java面经分享:25 分类、1000 道 Java 面试真题(50w 字解析)

    作为 Java 程序员 选择学习什么样的技术 什么技术该不该学 去招聘网站上搜一搜 看看岗位要求就十分清楚了 自己具备的技术和能力 直接影响到你工作选择范围和能不能面试成功 如果想进大厂 那就需要在 Java 核心技术栈上面好好准备了 具体
  • 通过增加模型的大小来加速Transformer的训练和推理

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 Eric Wallace 编译 ronghuaiyang 导读 你没有看错 确实是通过增大模型的大小 大家别忘了 在训练的时候 有个隐含条件 那就是模型需要训练到收敛 模型训练会
  • SQL Server 变量

    变量的种类 在T SQL中 变量按照生存范围分为 局部变量和 全局变量 1 全局变量是由系统定义的 在整个SQL Server实例内都能访问到的变量 以 作为第一个字符 用户只能访问 不可以赋值 2 局部变量由用户定义 生命周期只在一个批处
  • 哈希函数的特征_哈希函数及其特征

    哈希函数的特征 Prerequisite Hashing data structure 先决条件 哈希数据结构 The hash function is the component of hashing that maps the keys
  • 机器学习之SVM支持向量机

    目录 经典SVM 软间隔SVM 核SVM SVM分类器应用于人脸识别 SVM优点 SVM缺点 经典SVM 支持向量机 Support Vector Machine SVM 是一种二分类模型 其基本思想是在特征空间中找到一个最优的超平面 使得
  • UWB系统的定位精度影响因素

    UWB系统的定位精度影响因素 影响UWB定位精度的因素较多 主要包括 多径效应 非视距传播 多址干扰 参考基站数量 参考基站位置和时钟同步误差等因素 1 多径效应 超宽带信号在室内传播过程中受到复杂的室内环境 如墙体 窗体及室内障碍物等 的
  • go的配置文件

    go湖南老乡 2018 2 5 17 55 54 package main import github com kylelemons go gypsy yaml fmt type reply to findnode neighbors st
  • 初学者用Eclipse和IDEA哪个好用一点?

    idea 毫无疑问 它已经强大到各处吊打eclipse了 新人更是推荐idea 它的语法提示十分智能 假如你写了一段很傻的代码 它会提示你使用更优写法 只需要点一下就可以自动变成更优写法了 普通for自动转增强for 自动转lambda语法
  • SpringBoot版本升级 2.4.5-->2.7.9 遇到的问题

    原项目功能部署 SpringCache Swagger 项目Boot版本升级遇到的问题 问题一 无法启动 报错信息为 org springframework context ApplicationContextException Faile
  • 查看Mysql表的引擎

    show create table 表名
  • 三.数 据 链 路 层

    数据链路层是实现设备之间通信的非常重要的一层 数据链路层的作用 数据链路层使用的信道 1 使用点对点信道的数据链路层 1 1 数据链路和帧 链路 link 是一条无源的点到点的物理线路段 中间没有任何其他的交换结点 一条链路只是一条通路的一
  • 数据分析之-pandas

    1 pandas库安装导入 windows下和linux下都可以使用pip安装 安装之前最好把pip升级到最新版 python m pip install upgrade pip 升级pip pip install pandas 安装pan
  • myabtis-plus 代码生成器自定义模板

    mybatis plus代码生成器默认生成的controller是下面这样的 一个空的controller RestController RequestMapping sysUserRoleRelevance public class Sy
  • JavaScript中浮点数精确值问题

    js中规定安全整数的范围是 2的53次方至2的53次方 也就是 9007199254740992 9007199254740992 在JavaScript中0 1 0 2不等于0 3的问题 0 1 0 2 0 300000000000000
  • 深度学习系统为什么容易受到对抗样本的欺骗?

    转自 https zhuanlan zhihu com p 89665397 本文作者 kurffzhou 腾讯 TEG 安全工程师 最近 Nature发表了一篇关于深度学习系统被欺骗的新闻文章 该文指出了对抗样本存在的广泛性和深度学习的脆
  • LeetCode 7. 整数反转(C语言)

    Description 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下
  • 【01规划】POJ 3621 Sightseeing Cows

    POJ 3621 Sightseeing Cows 题意 给定一张 n 个点 m 条边的有向图 每个点都有一个权值 f i 每条边都有一个权值 t i 求图中的一个环 使 环上各点的权值之和 除以 环上各边的权值之和 最大 输出这个最大值