kuangbin专题八 HDU4009 Transfer water (无定根最小树形图)
题意:
在山上有N户人家,每家的坐标为(xi, yi, zi)。每户人家要吃水,要么自己打井,花费为X*zi,要么从别人的家引水渠代价为 两家的曼哈顿距离*Y,如果这家的海拔比供水的低,还要另外再买一个价值为C的水泵。然后有N个k,表示的是每户人家可以引水渠到哪一家,现在问每家都有水喝的最低花费是多少。
题解:
一开始我纠结于如何在最小树形图中判断水泵到底安不安装,后来别人说直接把水泵的价格放进去单边权值就可以了,还有一点就是因为是不定根,所以我们要弄个超级源点,超级源点到各个点的权值为各个点打井的权值,然后就可以了,那个“poor XiaoA”其实是不会出现的。。因为最坏的情况,每家都可以自己打水井。
题外话:
有时候自己傻逼起来是真的可怕。。。把MAXN*MAXN放到点的结构体那里了,导致一直超时,对着模板都还能打错。。。妈的还有就是括号多了也看不清楚。。哎
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
const int MAXN=1000+7;
struct node1
{int u,v,w;
}map[MAXN*MAXN];
struct point
{int x,y,z;
}p[MAXN];
int pre[MAXN];
int ID[MAXN];
int IN[MAXN];
int vis[MAXN];
int n,m,X,Y,Z;
int zhuliu_mst(int root,int V,int E)
{int res=0;while(true){for(int i=0;i<V;i++) IN[i]=INF;for(int i=0;i<E;i++){int u=map[i].u;int v=map[i].v;if(map[i].w<IN[v]&&u!=v){pre[v]=u;IN[v]=map[i].w;}}for(int i=0;i<V;i++)//实际上这个判断每个点没入边是没必要的,因为可以自家打井 if(i!=root&&IN[i]==INF)return -1;int cnt=0;memset(ID,-1,sizeof(ID));memset(vis,-1,sizeof(vis));IN[root]=0;for(int i=0;i<V;i++){res+=IN[i];int v=i;while(vis[v]!=i&&ID[v]==-1&&v!=root){vis[v]=i;v=pre[v];}if(v!=root&&ID[v]==-1){for(int u=pre[v];u!=v;u=pre[u]){ID[u]=cnt;}ID[v]=cnt++;}}if(cnt==0) break;for(int i=0;i<V;i++){if(ID[i]==-1)ID[i]=cnt++;}for(int i=0;i<E;i++){int u=map[i].u;int v=map[i].v;map[i].u=ID[u];map[i].v=ID[v];if(ID[u]!=ID[v])map[i].w-=IN[v];}V=cnt;root=ID[root];}return res;
}
int main()
{while(~scanf("%d%d%d%d",&n,&X,&Y,&Z)){if(n==0&&X==0&&Y==0&&Z==0)break; m=0;for(int i=1;i<=n;i++)scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);for(int i=1;i<=n;i++){int k,v;scanf("%d",&k);for(int j=1;j<=k;j++){scanf("%d",&v);map[m].u=i;map[m].v=v;map[m].w=(abs(p[i].x-p[v].x)+abs(p[i].y-p[v].y)+abs(p[i].z-p[v].z))*Y;if(p[i].z<p[v].z)map[m].w+=Z;m++;}} for(int i=1;i<=n;i++){map[m].u=0;map[m].v=i;map[m].w=p[i].z*X;m++;}int ans=zhuliu_mst(0,n+1,m);//如果从点是1算的话,还是用n+1吧。。不然每次算完缩点之后的个数都要-1,麻烦 if(ans==-1)printf("poor XiaoA\n");//这句话不会出现的。。因为可以自家打井,但是还是写上去吧 elseprintf("%d\n",ans);}
}
kuangbin专题八 HDU4009 Transfer water (无定根最小树形图)相关推荐
- kuangbin专题八 HDU4081 Qin Shi Huang's National Road System(次小生成树)
题意: 有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点.秦始皇希望这所有n-1条路长度之和最短.然后徐福突然有冒出来,说是他有魔法,可以不用人力.财力就变出其 ...
- 老鱼的-kuangbin专题题解
kuangbin专题问题一览 专题一 简单搜索 POJ 1321 棋盘问题 POJ 2251 Dungeon Master POJ 3278 Catch That Cow POJ 3279 Flipt ...
- kuangbin 专题一 简单搜索
kuangbin 专题一 简单搜索 1.POJ1321棋盘问题[DFS] 代码 自己的想法 2.POJ2251Dungeon Master[三维空间BFS] 代码 自己的想法 3.POJ3278 Ca ...
- hdu 4009 Transfer water(最小树形图模板)
题目链接:点击打开链接 Transfer water Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Ja ...
- SQL语句复习【专题八】
SQL语句复习[专题八] 序列 Sequence.数据库对象是 oracle 专有的. 作用:可以将某一列的值使用序列,来实现自动增长的功能. 访问序列的值.[序列有两个属性 nextval curr ...
- [.NET领域驱动设计实战系列]专题八:DDD案例:网上书店分布式消息队列和分布式缓存的实现...
原文:[.NET领域驱动设计实战系列]专题八:DDD案例:网上书店分布式消息队列和分布式缓存的实现 一.引言 在上一专题中,商家发货和用户确认收货功能引入了消息队列来实现的,引入消息队列的好处可以保证 ...
- web报表开发技术专题八:总结
以前上博客园时,我是最怕看到一二三四之类的系列文章的,没想自己也这样做了.实在是因为无法在一篇文章之中讲清如此多的东西,现在写了这些有关web报表开发的文章之后,还是觉得有很多方面没有涉及,基本上只是 ...
- 开发指南专题八:JEECG微云快速开发平台数据字典
开发指南专题八:JEECG微云快速开发平台数据字典的使用 1.标签中使用数据字典 数据字典为系统中可能用到的字典类型数据提供了使用的便利性和可维护性.以下拉框标签<t:dictSele ...
- Community Server专题八:MemberRole之Membership深入篇 [转]
专题八的上篇大致讨论了MemberRole中的Membership实现,对于运用Membership进行web开发足够,但是对于想更深入了解Membership实现机理的朋友那是远远不够的,这个专题我 ...
最新文章
- sl中几个简单变量的获取
- 技术负责人所需的四个核心能力,你具备几个?
- mysql 小类型_mysql 数据类型
- 在WIN7下硬盘安装XP双系统
- 数据库支持的数据类型
- 6-2 删除单链表偶数节点 (10 分)
- 解决URI is not registered (Settings | Languages Frameworks | Schemas and DTDs)
- 新浪微博王传鹏:微博推荐架构的演进
- mysql索引小结_[数据库]mysql索引小结_星空网
- 衡水十四中2021高考成绩查询,心之所向,行必能至|衡水市第十四中学召开2021高考倒计时200天动...
- 忘记背后 努力面前 向着标杆直跑!(转)
- 计算机网络口诀,网线水晶头接法顺序图解分享,这个简单口诀记好了(超实用)...
- 英语基础-动词的分类
- DS 500PM mobil便携式智能图表记录仪订购代码0500 5340_A1_B1_C1_D1_E1
- java程序员自己的图片转文字OCR识图工具
- 光纤交换机 序列号_Brocade光纤交换机常用命令
- android 寺库trytry_wpf 中使用 ttf
- vue使用常见问题及解决方案
- linux 时区设置 美国西部,Linux下修改系统时区
- 211高校一29岁寒门博士生跳楼自杀,多方各执一词!
热门文章
- China Quarantines Mexicans
- 上号神器,和平精英扫码登录教程
- 简易51单片机密码锁
- rec删除xposed_刷机,twrp,安装xposed
- twrp扩大system分区_TWRP recovery 的备份功能里面有 2 个 system 分区,多占用空间,怎么搞掉?...
- Checkout和Rest的所有谜题(git reset --files是要改一下)
- ksy是谁_丽水KSY-B-400/100防雷模块是谁家的
- 利用运放实现信号的平移
- 4.TradingView K线和成交量没有自适应区域显示,ma线显示会错乱,高低不齐(巨坑)
- 《python程序设计》翁恺_程序设计类精品视频课