HDOJ 4650: Minimum Average Weight Path

DIY等离子环:从Class-E电路到七彩辉光,手把手教你打造炫酷科学玩具 本文手把手教你DIY一个炫酷的等离子环科学玩具。从解析等离子体辉光放电原理入手,详细介绍了核心的Class-E自激振荡电路设计、关键元件选型与参数计算,并提供了从物料准备、电路搭建、腔体密封到上电调试的全流程指南。通过调制电路或填充不同气体,还能实现七彩变换与交互效果,是学习高频电路与电磁场知识的绝佳实践项目。 阅读详情

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4650


题目大意:

给定一个无重边的有向图,

求全源最小平均权值路径。

最小平均权值路径的定义是,路径总权值 / 路径上的边数最小。


算法:

题目应当分为两种情况:

两点间的路径上可能存在负环,如果一条路径沿着这个负环不断走下去,那么最终的平均值一定是趋于这个负环的平均权值。

无负环,那么这个显然很好求。

做这道题首先要知道一种用矩阵求两点间恰好K条边的最短路径的方法。不清楚的话建议去做POJ 3613。

首先,利用矩阵乘法,由1~n枚举路径长度,然后根据此时各点间的最短路 / 路径长度,不断更新此时的最小平均权值路径。

然后,讨论图上的各个环,如果某点有负环,那么对于任两个可以到达这个点的点对,这个负环的平均权值可能会更新这个点对上的最小平均权值。


PS:这算是我做过的少有的,在赛场上写出来且代码量极小,却可以把它归为中高级图论的题吧。笑。


代码如下:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<sstream>
#include<cstdlib>
#include<cstring>
#include<string>
#include<climits>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<set>
#include<map>
#define INF 0x3f3f3f3f
#define eps 1e-8
using namespace std;

const int MAXN=110;
int vis[MAXN][MAXN];
double ans[MAXN][MAXN];
int tot;

struct Matrix
{
    int h,w;
    int mx[MAXN][MAXN];
    Matrix operator* (const Matrix& b) const
    {
        Matrix tmp;
        memset(tmp.mx,INF,sizeof(tmp.mx));
        tmp.h=h;
        tmp.w=b.w;
        for (int i=1; i<=h; i++)
        {
            for (int j=1; j<=b.w; j++)
            {
                for (int k=1; k<=w; k++)
                {
                    if(vis[i][k]==-1||tot<vis[i][k])
                    {
                        continue;
                    }
                    if(vis[k][j]==-1||tot<vis[k][j])
                    {
                        continue;
                    }
                    tmp.mx[i][j]=min(tmp.mx[i][j],mx[i][k]+b.mx[k][j]);
                }
            }
        }
        return tmp;
    }
};
Matrix g,f;

int main()
{
    int n, m;
    while(scanf("%d %d",&n, &m)==2)
    {
        memset(g.mx,INF,sizeof(g.mx));
        g.h=g.w=n;
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                ans[i][j]=1e7;
            }
        }
        memset(vis,-1,sizeof(vis));
        for(int i=0; i<m; i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            scanf("%d",&g.mx[u][v]);
            vis[u][v]=1;
        }
        for(int k=1; k<=n; k++)
        {
            for(int i=1; i<=n; i++)
            {
                if(vis[i][k]==-1)
                {
                    continue;
                }
                for(int j=1; j<=n; j++)
                {
                    if(vis[k][j]==-1)
                    {
                        continue;
                    }
                    vis[i][j]=(vis[i][j]==-1)?vis[i][k]+vis[k][j]:min(vis[i][j],vis[i][k]+vis[k][j]);
                }
            }
        }
        f=g;
        for(tot=1; tot<=n; tot++)
        {
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=n; j++)
                {
                    if(vis[i][j]!=-1&&tot>=vis[i][j])
                    {
                        ans[i][j]=min(ans[i][j],(double)f.mx[i][j]/tot);
                    }
                }
            }
            f=f*g;
        }
        for(int k=1; k<=n; k++)
        {
            for(int i=1; i<=n; i++)
            {
                if(vis[i][k]==-1)
                {
                    continue;
                }
                for(int j=1; j<=n; j++)
                {
                    if(vis[k][j]==-1||vis[k][k]==-1)
                    {
                        continue;
                    }
                    ans[i][j]=min(ans[i][j],ans[k][k]);
                }
            }
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(j>1)
                {
                    putchar(' ');
                }
                if(vis[i][j]!=-1)
                {
                    printf("%.3lf",ans[i][j]);
                }
                else
                {
                    printf("NO");
                }
            }
            puts("");
        }
    }
    return 0;
}


GPU硬件架构与微架构深度解析09-GPU寄存器文件深度解析 本文探讨GPU架构中大规模寄存器堆的设计与高效分配算法。寄存器文件作为GPU关键组件,支持大规模线程并行和快速数据存取。文章分析了多体寄存器堆的设计考量,包括端口数量、冲突避免和功耗管理,并比较了线性扫描、图着色等寄存器分配算法的特点。还介绍了寄存器压缩、动态分区等高级优化技术,以及NVIDIA Ampere架构的实际案例。这些技术对提升GPU计算性能和能效至关重要。 阅读详情

相关推荐

告别玄学调试:用STM32CubeMX和逻辑分析仪搞定DP83848的RMII与SMI接口

本文详细介绍了如何使用STM32CubeMX和逻辑分析仪调试DP83848的RMII与SMI接口,帮助开发者超越表象,直接观察底层通信波形。通过实战案例和高级调试技巧,解决常见问题如时钟偏移、信号完整性等,提升网络接口的稳定性和可靠性。

weixin_30752699的博客 299

hdu 4650 Minimum Average Weight Path

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4650题目翻译:给定一个无重边的有向图,求全源最小平均权值路径。最小平均权值路径的定义是,路径总权值 / 路径上的边数最小。题目分析:利用矩阵乘法 计算出走k 步时1-n的最短路径/走过的步数k分两种情况讨论:1.这条路径上没有负环,则直接更新 与ans[i][j]/k比较

xiaotaike1的专栏 332

保姆级教程:用Python脚本一键把选股结果导入通达信自选股(附完整代码)

本文提供了一份详细的Python自动化教程,教你如何将选股结果一键导入通达信自选股。通过解析通达信文件结构、编写Python脚本实现股票代码转换和批量导入,大幅提升量化交易效率。教程包含完整代码示例,特别适合使用通达信(TDX)的投资者和量化交易开发者。

weixin_30915951的博客 358

hdu 4650 Minimum Average Weight Path(最短路,5级)

第4场多校联合训练解题报告——详见杭电ACM微博~ Minimum Average Weight Path Time Limit: 20000/10000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 94...

weixin_30895603的博客 152

USB2.0信号完整性测试之眼图

名称线缆颜色引脚描述红色绿色白色GND黑色。

qq_53766840的博客 3286

Arduino IDE 2配置ESP32-S3工程全指南

嵌入式开发中,Arduino框架通过硬件抽象层(HAL)大幅降低MCU入门门槛,其核心在于板级支持包(BSP)与底层构建系统(如ESP-IDF)的精准协同。理解CPU频率、Flash模式、分区表、PSRAM等关键配置,本质是掌握SoC时钟树、SPI Flash通信协议、内存映射与FreeRTOS调度机制的技术原理。这些参数不仅决定固件能否启动,更直接影响功耗、实时性、OTA升级与大容量应用(如LVGL、TFLite Micro)的可行性。本文以ESP32-S3为例,聚焦Arduino IDE 2.x环境下从

root9的博客 783

最小路径和(minimum-path-sum)

title: 最小路径和(minimum-path-sum) date: 2019-12-09 21:31:48 tags: [java,动态规划] 题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: ...

mirana的专栏 580

AD9826的时序分析及Verliog代码

AD9826的时序分析及Verliog代码 (本文对AD9826的模式和时序进行了分析,如有错误敬请指正,关于这款ADC芯片的基本参数,本文不做过多介绍) 1、AD9826的模式 AD9826的采样模式主要有两种,一种是“CDS模式”,一种是“SHA模式”;在这两种模式下分别有1通道、2通道、3通道的采样模式 (1)CDS模式 简单的来说CDS模式就是,有两个采样时钟,一个是ADCCLK1,用来采样CCD波形的参考电平,一个是ADCCLK2用来采样数据电平,然后经过,偏移量调节,再经过PGA增益放大最

m0_50102488的博客 6475

2018.10.21 codeforces1071B. Minimum path(dp+贪心+bfs)

传送门 唉考试的时候写错了两个细节调了一个多小时根本没调出来。 下来又调了半个小时才过。 其实很简单。 我们先dpdpdp出最开始最多多少个连续的aaa. 然后对于没法继续连续下去的用贪心+bfsbfsbfs来弄就行了。 技不如人,告辞。 代码: #include<bits/stdc++.h> using namespace std; i...

weixin_30610755的博客 156

告别Keil!用VSCode+PlatformIO玩转STC单片机(附自动下载配置)

本文详细介绍了如何从Keil迁移到VSCode+PlatformIO进行STC单片机开发,包括环境搭建、自动下载配置等实用技巧。通过对比传统IDE与现代工具链的差异,展示了VSCode+PlatformIO在代码编辑体验、跨平台支持和开发效率上的优势,帮助开发者实现更流畅的STC单片机开发流程。

weixin_27252001的博客 458

YOLO26涨点改进 | 全网独家复现、小目标检测改进篇 | TGRS 2025 | YOLO26引入MFAE-YOLO中的GFFP、FCPS 和 C3k2-FPEU创新点,涨点起飞,直接发论文

🔥本文给大家介绍在YOLO26中引入MFAE-YOLO中的 GFFP(全局特征融合处理)、FCPS(特征通道像素注意力) 和 C3k2-FPEU(特征池提取单元) 二次创新改进模块,能显著提升对小目标的检测性能。GFFP通过多尺度特征融合增强全局上下文感知能力,有效提升小目标在复杂背景下的可辨性;FCPS融合通道、像素和空间注意力机制,增强了模型对关键细节和小区域特征的关注,提升检测精度;C2F-FPEU利用多种池化方式挖掘细节特征,优化浅层特征表示能力。三者协同提升了YOLO26在小目标检测中的鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 305

BZOJ 1494: [NOI2007]生成树计数

这题确实比较难, 所以我写解题报告也尽量从浅显处着手,希望能够帮到大家。 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1494 题目大意:有n(n 算法: 从这道题的数据范围,不难看出要使用状态压缩。 首先,我们来确定前k个点的状态。

frog的小池塘 2671

YOLOv11-seg改进系列 | 引入CVPR2022 MetaFormer,零参数池化Token混合+StarReLU MLP,精度涨不掉速

本文提出了一种改进YOLOv11分割任务的C3k2_PoolingFormer模块,通过引入MetaFormer架构和Pooling Token Mixer,在保持模型轻量化的同时增强全局感受野建模能力。核心创新包括:1)使用零参数的AvgPool3×3差值作为Token Mixer,实现高效邻域信息聚合和局部对比增强;2)采用StarReLU MLP替代传统激活函数,提升非线性表达能力。改进后模型仅增加6.1%参数量,却能显著提升分割精度,特别适用于需要长程依赖建模的实例分割任务。该设计为轻量级视觉模型提

qq_44224801的博客 431

SPOJ MSTS: Count Minimum Spanning Trees

题目链接:http://www.spoj.com/problems/MSTS/ 题目大意: 最小生成树计数 算法: 首先要明白一个性质: 所有最小生成树的权值为ci的边的数量ni和所连接的点集S是一样。 由此可以计算每种权值的边拿出ni个构成S的最小生成树的数量。 那么我们把权值相同的边看成一组,我们先从小到大的求每个组的联通块中生成树的数量。 然后把每个组内的

frog的小池塘 2572

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SGU 307: Cipher

题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=307 题目大意: 现在有一个网格,每个格子上填了1或0。 先给出每相邻四个格子的和。 求可行方案 算法: 其实我们不难看出, 整个网格的状态是由第一行和第一列决定的。 我们不妨枚举(0,0)的状态, 然后再根据给出的和对于所有其它第一行和第一列的格子做限制。

frog的小池塘 2100

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

CF 379F: New Year Tree

题目链接: http://codeforces.com/contest/379/problem/F 题目大意: 给定一棵树, 每次向树上的某个节点添加两个子节点,然后询问树的直径(树上最长路径)。 算法: 如果我们记录下添加节点前树上的最远路径长度及两个端点A,B。 那么添加两个新节点之后,如果直径被更新,那么新直径的一端是A或

frog的小池塘 1906

POJ 3463: Sightseeing

题目链接:http://poj.org/problem?id=3463 题意: 给定一个有向图, 求起点到终点间, 最短路径以及长度为最短路径长度加1的路径总共有几条。 算法: 对dijkstra算法的一些变形。 对于每个点,预处理出起点、终点到它的最短路径长度以及最短路径数。 然后对于每个处于某条最短路径上的点, 若他的某条边,可以得到一条长度比最短路径长度加一

frog的小池塘 1791

HDOJ 4621: Life Game

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4621 题目大意: 有一个n*m的网格,可以把它染成黑色或白色。 如果某个格子被染成黑色,它可以获得一定的权值b[i],如果某个格子被染成白色,它也可以获得一定的权值w[i]。 另有若干要求,要求的形式是,指定一种颜色,如果某子矩阵都被染成这种颜色,则可以获得一定的额外奖励。 求最大获

frog的小池塘 1723

HDOJ 1180: 诡异的楼梯

其实这是一道水题,因为有人问所以做了一下。 第一次知道HDOJ AC数1000+的题目我也可以写将近一个小时。。 俗话说的好,做水题伤身。 俗话又说的好,做水题还犯脑残错误更伤身。 俗话还说的好,脑残无药医啊啊啊啊啊啊啊啊 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意: 给定一个n*m的地图,给定了起

frog的小池塘 1715

ZOJ 3717: Balloon

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3717 题意: 有N组气球,每组有一个蓝气球以及一个红气球可供选择,它们各自有自己的圆心坐标。在每组中选择一个气球吹起来,要求把所有的气球吹到一样大,气球和气球之间不能重叠。问最多可以吹多大。 算法: 典型的二分求值+2-SAT判定 o(n

frog的小池塘 1638

HDOJ 3594: Cactus

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3594 题目大意: 仙人掌图的判定。 仙人掌图是一种强连通图,使得每条边至多在一个环上。 算法: 仙人掌算是一种蛮流行的图论模型吧。 wiki上Cactus Graph的定义是: 一个无向连通图,任两个简单环至多含有一个公共点,等价于任一条边至多属于一个简单环,等价于任

frog的小池塘 1618

URAL 1004: Sightseeing Trip

题目链接:http://acm.timus.ru/problem.aspx?num=1004 题目大意: 求无向图最小环,若有解需输出方案 算法: floyd的基础应用, 注意排除两点环 代码如下:#include #include #include #include using namespace std; int d[150][150],edge[150]

frog的小池塘 1510

HDOJ 4081: Qin Shi Huang's National Road System

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4081 题目大意: 求一个图的生成树, 可以指定一条边为“魔法边”,使其边权变为0。 在此基础上,要求  “ '魔法边' 连接的两点的点权 / 生成树上其它边的边权"  最大。 算法: 首先,一定是在最小生成树上去掉一条边,然后在被分成的两部分间加上一条边。 因为把

frog的小池塘 1469

POJ 3662: Telephone Lines

寒假复习图论的时候做的,因为把它加在了暑假集训的专题训练里,所以补一下解题报告。 题目链接:http://poj.org/problem?id=3662 题目大意:要在N个点建电话线,目前有K根是免费的,问付费建的电话线中最长的一根至少要多长,才能使点1到点n是联通的。 算法: 二分求最长边的长度。 每次二分要用dijkstra判断合法性, 判断时,一条边如果长

frog的小池塘 1458

POJ 2942: Knights of the Round Table

题目链接:http://poj.org/problem?id=2942 题目大意: 将若干个骑士分配到若干个桌子开会, 每个桌子的人数都是奇数。 若两个骑士相互憎恨,那么他们不能左右相邻坐。 如果一个骑士无法被安排在任何一个桌子,那么他将会被驱逐。 输出至少驱逐几个骑士。 算法: 双联通+奇圈。 首先,如果两个骑士可以相邻坐,就在它们之间连一条无向边。 然后求双

frog的小池塘 1450
上一篇: POJ 2019: Cornfields
下一篇: HDOJ 4621: Life Game
frog1902
博客等级 码龄14年 152粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值