HDU 4009 最小树形图

一文读懂,WMS仓库管理系统模块功能 对于仓库管理人员来说,仓储管理是一件需要十分负责、又精细化的工作。 阅读详情
/********************************************************************************
    模板题。。。问题是比赛的时候一直没看出来,以为最小费用流,Racebug用邻接矩阵敲的,
结果杯具TLE,要是用邻接表再稍微优化下的,就过了~
********************************************************************************/
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <utility>
#include <cstdio>
#include <memory>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <map>
#include <set>
using namespace std;

typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef map<int, int>::iterator MI;
typedef vector<int>::iterator VI;
typedef set<int>::iterator SI;

const int INF_INT = 0x3f3f3f3f;
const double oo = 10e9;
const double eps = 10e-7;
const double PI = acos(-1.0);

const int MAXV = 1004;
const int MAXE = MAXV * MAXV;

struct Point
{
    int x, y, z;
}pnt[MAXV];
struct Edges
{
    int beg, end;
    int cost;
    int next;
}edges[MAXE];
int ecnt, head[MAXV];
int n, X, Y, Z;
int in[MAXV], pre[MAXV], id[MAXV], vis[MAXV];
const int src = 0;

inline int manhattan_dist(const Point &pa, const Point &pb)
{
    return abs(pa.x - pb.x) + abs(pa.y - pb.y) + abs(pa.z - pb.z);
}
inline void add_edge(int u, int v, int c)
{
    edges[ecnt].beg = u;
    edges[ecnt].end = v;
    edges[ecnt].cost = c;
    edges[ecnt].next = head[u];
    head[u] = ecnt++;
    return ;
}
int directed_mst(int root, int vcnt)
{
    int res = 0;
    while (true)
    {
        fill(in, in + vcnt, INF_INT);
        for (int i = 0; i < ecnt; ++i)
        {
            int u = edges[i].beg;
            int v = edges[i].end;
            if (edges[i].cost < in[v] && u != v)
            {
                pre[v] = u;
                in[v] = edges[i].cost;
            }
        }
        for (int i = 0; i < vcnt; ++i)
        {
            if (root == i)
            {
                continue ;
            }
            if (INF_INT == in[i])
            {
                return -1;
            }
        }
        int ncnt = 0;
        fill(id, id + vcnt, -1);
        fill(vis, vis + vcnt, -1);
        in[root] = 0;
        for (int i = 0; i < vcnt; ++i)
        {
            res += in[i];
            int v = i;
            while (vis[v] != i && -1 == id[v] && v != root)
            {
                vis[v] = i;
                v = pre[v];
            }
            if (v != root && -1 == id[v])
            {
                for (int u = pre[v]; u != v; u = pre[u])
                {
                    id[u] = ncnt;
                }
                id[v] = ncnt++;
            }
        }
        if (0 == ncnt)
        {
            break ;
        }
        for (int i = 0; i < vcnt; ++i)
        {
            if (-1 == id[i])
            {
                id[i] = ncnt++;
            }
        }
        for (int i = 0; i < ecnt; ++i)
        {
            int v = edges[i].end;
            edges[i].beg = id[ edges[i].beg ];
            edges[i].end = id[ edges[i].end ];
            if (edges[i].beg != edges[i].end)
            {
                edges[i].cost -= in[v];
            }
        }
        vcnt = ncnt;
        root = id[root];
    }
    return res;
}
void ace()
{
    int k, u, v;
    int ans, buf;
    while (scanf("%d %d %d %d", &n, &X, &Y, &Z), n || X || Y || Z)
    {
        ++n;
        ecnt = 0;
        memset(head, -1, sizeof(head));
        for (int i = 1; i < n; ++i)
        {
            scanf("%d %d %d", &pnt[i].x, &pnt[i].y, &pnt[i].z);
        }
        for (u = 1; u < n; ++u)
        {
            add_edge(src, u, pnt[u].z * X);
        }
        for (u = 1; u < n; ++u)
        {
            scanf("%d", &k);
            while (k--)
            {
                scanf("%d", &v);
                if (v == u)
                {
                    continue ;
                }
                buf = manhattan_dist(pnt[u], pnt[v]) * Y;
                if (pnt[u].z < pnt[v].z)
                {
                    buf += Z;
                }
                add_edge(u, v, buf); 
            }
        }
        ans = directed_mst(src, n);
        if (-1 == ans)
        {
            puts("poor XiaoA");
        }
        else
        {
            printf("%d\n", ans);
        }
    }
    return ;
}
int main()
{
    ace();
    return 0;
}

预测股票价格趋势:使用MATLAB进行股票价格预测 通过收集股票数据、数据预处理、构建预测模型以及可视化结果,我们可以利用MATLAB强大的计算和分析功能来预测股票价格的走势。然而,需要注意的是,股票市场具有高度复杂性和不确定性,预测结果仅供参考,并不构成投资建议。然而,借助计算机编程和数据分析工具,我们可以利用历史股价数据来建立模型,并预测未来的股票价格走势。首先,我们需要获取股票的历史价格数据。完成模型的拟合后,我们可以使用该模型来进行未来股票价格的预测。最后,我们可以使用MATLAB的绘图功能将预测的股票价格与实际股票价格进行对比,并进行可视化展示。 阅读详情

相关推荐

程序员必备75道逻辑思维题(附答案)之二

逻辑训练 身为一个大数据工程师,平时的算法训练还是不能少的,今天给大家看几道我曾经看到的逻辑思维题觉得很好,想分享一下。 【6】一个球、一把长度大约是球的直径2/3长度的直尺.你怎样测出球的半径?方法很多,看看谁的比较巧妙 【7】五个大小相同的一元人民币硬币。要求两两相接触,应该怎么摆? 【8】猜牌问题 S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4 黑桃J、8、4、2、...

蛋蛋淡淡定的庄园 3547

hdu4009Transfer water【最小树形图】

题意:居民点取水,可以自己挖井,可以从别的地方引用,但是有些边不能引用,如果引用的地点海拔高只需要买水管子的钱,引用点海拔低不仅要买泵也要买水管子的钱!!!(这里读错题了) 很明显的不定根最小树形图,既然不定根是虚拟出来一个根把它和所有点连起来,最终的结果减去这个边长就可以了,那么不定多根也是一样啊,这题加的虚边权正好是挖井的钱啊。最后就不减去那些边权了啊。所以说,图论的核心还是建边啊

MissZhou要努力 461

微机原理与接口技术第六版周荷琴课后习题答案及解析(期末重点)

第二章 1.8086/8088CPU可直接寻址多少个内存(字节)单元?多少个I/O端口?它们的外部数据总线各有多少根? 8086/8088CPU使用的是20位地址总线,因此可以直接寻址2的20次方个内存单元(即1,048,576),每个单元大小为1字节,因此可以直接寻址2的20次方个字节的内存。 8086/8088CPU有64K个I/O端口,每个端口占用1字节的地址空间,因此可以直接寻址6...

Wmicheng的博客 1万+

hdu 4009 Transfer water 最小树形图

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4009 题目大意: 在山上有N户人家,每家的坐标为(xi, yi, zi)。每户人家要吃水,要么自己打井,花费为A zi,要么从别人的家引水渠代价为B 两家的曼哈顿距离,如果这家的海拔比供水的低,还要另外再买一个价值为C的水泵。问每家都有水吃的最低花费是多少。 每家都有水的目标一定能达成

弱菜zc 701

ISO26262 功能安全各个阶段测试要求

1. 开发过程说明 系统层面:包括软硬件集成测试、系统集成测试以及整车测试。 硬件层面:包括硬件集成与测试。 软件层面:单元测试、集成测试。 2. 功能安全总体要求 2.1 各项指标 2.2 诊断覆盖度举例 针对一个信号举例说明: 3. 功能安全测试要求 3.1 测试计划 核心内容应包括, 测试对象:需要测试的对象描述,以及测试的范围描...

AgingMoon的博客 1万+

Python全栈入门到实战【JavaScript篇 15】async/await与Fetch API,打通前后端数据通道

Fetch API是浏览器内置的现代HTTP请求接口,用于向服务器发送请求并获取响应。它是(XHR)的替代品。学习Fetch的目标非常明确——用JS从后端API获取数据,并渲染到前端页面。这标志着前后端数据通道的打通,是实现全栈开发的核心技能。try {// 等待Promiseconst parallel = await Promise.all([ // 并行等待]);

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1984

HDU 4009 无定根最小树形图(依据题意建根)

HDU 4009 给出3维的点,由每个点的信息建立一个有向图,然后求出最小树形图 建图方法:先把每个点的信息存着.根据每个点指向的另一个点的高度来建边, p[i].z >= p[to].z,就不需要水泵 p[i].z < p[to].z,加上一个水泵 题目告诉可以挖井是什么意思? 题目也没有给出有向图的原点,我们又需要建一个虚根作为原点. 那么可以将所有井的底部都抽象成虚...

_llc的博客 147

自动化控制软件:Beckhoff TwinCAT二次开发_(7).HMI开发基础

TwinCAT HMI是Beckhoff公司为TwinCAT自动化平台开发的专用HMI软件。Web技术基础:基于Web技术,支持HTML5、CSS3和JavaScript,可以轻松集成第三方库和框架。多平台支持:可以在多种设备上运行,包括PC、平板电脑和智能手机。高效开发:提供丰富的组件库和开发工具,简化开发过程。安全性:支持多种安全机制,确保数据和系统的安全性。可扩展性:支持自定义组件和脚本,满足不同应用场景的需求。Button:按钮组件,用于触发操作。Label:标签组件,用于显示文本信息。

2401_87715305的博客 986

HDU 4009 Transfer water(无固定根最小树形图)

题目链接: HDU 4009 Transfer water 题意: 需要给n户人家通水。给出每户人家的三维坐标,每户人家自建一口井的花费是X,对于每户人家给出k[i]条边,to[j],表示可以从第u=i户人家铺设一条水管道到第v=to[j]户人家,铺设的费用是两户人家三维坐标之差的绝对值之和*Y,如果u的高度小于v的高度还需要额外加上Z花费。问将n户人家都通上水的最小花费是多少?如果不能使每户

ramay7 500

milvus | 第 1 章:从“相似图片搜索”理解 Milvus 向量数据库

本文介绍了向量数据库Milvus的核心概念和基本架构。主要内容包括:1)向量数据库解决的是高维向量相似度检索问题,通过Embedding将非结构化数据转换为向量进行比较;2)Milvus作为分布式向量数据库,包含Proxy、Coordinator、QueryNode等多个组件协同工作;3)关键概念如Collection、Schema、Segment等构成了Milvus的数据组织方式;4)典型使用流程包括创建集合、插入数据、构建索引、加载数据和执行搜索五个步骤。文章为后续深入理解Milvus源码提供了基础知识

weixin_43674738的博客 134

【Python】解决 ERROR: Exception:Traceback (most recent call last):(亲测有效)

1、遇到问题2、问题解决

Fanjufei的博客 1万+

HDU - 4009-Transfer water (最小树形图)

题目链接:HDU - 4009-Transfer water最小树形图模板。 二重循环下标写同样的WA了好久。。。#include<bits/stdc++.h> using namespace std; int n,x,y,z,m; const int maxn=1007; const int INF=2e9+7; struct Edge{ int u,v; int d; }; E

On the way 466

Ollama教程——模型:如何将模型高效导入到ollama框架

本教程详细介绍了如何将GGUF、PyTorch和Safetensors格式的模型导入到ollama框架中。通过一系列步骤,从环境准备、模型转换和量化,到最终的模型创建和运行,我们为开发者提供了一个清晰的指南。此外,我们还探讨了如何发布模型到ollama平台,使得模型可以被更广泛地分享和应用。ollama框架提供了一个灵活、高效的解决方案,帮助开发者在各种环境中部署和运行机器学习模型。无论您是想将现有模型快速部署到生产环境,还是希望探索新的模型架构,ollama都能为您提供所需的工具和资源。

walkskyer的博客 1万+

HDU 4009 Transfer water 朱刘算法求无固定根最小树形图

题目链接:HDU 4009 分析:和

699

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

HDU4009 Transfer water【最小树形图算法详解】

最小树形图 最小树形图实际上可以理解为有向图的最小生成树,它满足这样的要求: 1、不存在环; 2、除根结点的入度为0,其他点的入度都为1; 3、满足1和2的条件的所有子图中权值和最小; 朱刘算法的基本思想 每次找最小入边集,如果有环或不连通,环缩点重新建图再继续重复; 0、初始化:每个点入边最小权值初始化为极大值; 1、找最小入边集:就是找到每一个点所有入边里权值最小的那个,并记录...

MaJorieL 340

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

HDU4009 Transfer water 最小树形图

最小树形图=有向图最小生成树 裸地朱刘算法 Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 2925    Accepted Submission(s): 1095

153

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

hdu 2121 , hdu 4009 无定根最小树形图

hdu 2121 题目:给出m条有向路,根不确定,求一棵最小的有向生成树。 分析:增加一个虚拟节点,连向n个节点,费用为inf(至少比sigma(cost_edge)大)。以该虚拟节点为根求一遍最小树形图算法,这时肯定存在解,如果费用>=inf时,说明无解。这是因为sigma(cost_edge)<inf。如何求得根?在寻找前驱时发现为根,则更新一下那条边的边号即可。 hd...

weixin_30872789的博客 90

HDU 4009 最小树形图

题意:有一个村庄需要给每户人家提供水,有两个方法:1.自己凿井    2.从有井的人家引过来,不同的方式有不同的花费,问你解决每户人家供水问题的最小花费。 思路:构建一个超级源点,丛源点引一条边到每个点(花费为 home.z * X)),可以引水的两个人家间构建一条边,然后对超级源点跑一次最小树形图即可(引用HH大牛的模板)。 总结:这个题目如果不是看了最小树形图的专题的话,目测我是没有能力做

yobobobo的专栏 1305

[HDU 4009] Transfer water (最小树形图)

题目链接:

SIOFive的专栏 1031

HDU 4009 Transfer water (最小树形图+虚根)

题意:有一个村庄需要修建供水系统。每户居民的房子都有一个三维坐标,每户居民可以选择自己挖井或者从其他居民家里引水。挖水井和引水分别需要花费不同的钱。每户居民有一个意愿表,只愿意对表内的居民家供水。最后要求计算出能为所有居民供水的最小花费。 题解:最小树形图+虚根 建一个虚根,将虚根连向所有点,边权为那个点自己挖井需要的费用。 其他按照居民意愿建边,跑朱刘。 数组开小了居然超时。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include

gongyuandaye的博客 273

hdu4009 Transfer water(最小树形图模板)

题目链接:点击打开链接 题意描述:在一个村庄有n户人家(x,y,h),现在打算在村庄中挖井和建水渠使每户人家都可以用上水 1、如果挖井费用为高度h*X; 2、如果a->b建水渠,if(a.h>=b.h)费用为两点距离dis*Y,反之费用为dis*Y+Z 问,怎样挖井和建水渠才能使费用最小? 解体思路:最小树形图:点击打开链接 分析:我们可以新建一个源点指向所有的用户,权值为挖井

Crazy_Bear 667

HDU 4009 Transfer water 最小树形图

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4009 题意:山上有n户人,均给出三维坐标,这n户人要吃水,可以挖井,花费为所处高度 * X,从别人家引水,若水源处不低于当前人家,那么为两户人的曼哈顿距离 * Y,若低于则额外加上一个水泵的费用Z,然后只有给定的家庭之间才能引水,问能使所有人都用到水的最小花费 思路:无定根最小树形图。定0为虚拟根,从

弱智就要多努力 441

HDU 4009 最小树形图裸题

题意: n个点 X Y Z (点标从1开始) 下面n个点的坐标(三维) 下面第i行表示i点能向 u 点引流 给定n个村要用水 1、自己打井,花费:坐标的高度*X 2、从有井的村落引流,花费:曼哈顿距离*Y (若水是往高处流的,还要花费Z购买水泵) 3、假设开始时所有村落没有任何井和管道 问: 若大家都能用上水则输出最小花费,否则输出poor XiaoA 思路: 因为引流一定要

九野的博客 1682

HDU 4009 不定根最小树形图

讲一下建图过程,首先建立一个超级源点S,对于这个源点,向每个HOUSE连一条有向边,权值为该HOUSE建立WELL的费用,即高度*X。 然后每个可以连边的WELL之间,费用为曼哈顿距离*Y,然后考虑两边的高度,如果需要连接PUMB,则在该费用上+Z。 这样建图之后,以S为根,跑一遍最小树形图算法即可。 CODE: #include <set> #include <...

weixin_30686845的博客 92

Transfer water 【HDU - 4009】【最小树形图】

题目链接 关于最小树形图的详细讲解   挺好的一道最小树形图,然后也卡了时间,让我知道了,每次更新,缩环成点的时候,再次遍历的时候,相同的点就不要管了,即使它们之间有边,也不需要了,反正就是环内的点,已经看成了一个点,不是吗?然后解决完这个问题之后WA了几发!我的天,为什么就WA!?然后找了半天BUG,没什么问题啊,然后在看,试了下改变判断的条件,如果它们是等高的,也要+Z的话!竟然是这样,A...

既然弱小,就只顾变强就是了 234

最小树形图(hdu4009)

Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 3821    Accepted Submission(s): 1371 Problem Description XiaoA lives in

PSQ的专栏 618
上一篇: The 36th ACM/ICPC Asia Regional Dalian Site —— Online Contest
下一篇: HDU 3944 组合数学+数论
codeforces_sphinx
博客等级 码龄15年 32粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值