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

题意:给出一个村庄(x,y,z)。每个村庄可以挖井或者修建水渠从其他村庄得到水。挖井有一个代价,修水渠有一个代价。另外A村庄只能向其指定的一些村庄供水。使得所有村庄有水求最小代价。

思路,建立源节点0,向每个点连边视为挖井,如果从其他村庄得到水就相当于从那个点引一条有向边过来。

 #include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
const int inf=;
int tot,In[],vis[],pre[],id[];
int X,Y,Z,n;
struct Point{
int x,y,z;
}p[];
struct edge{
int u,v,w;
}e[];
void insert(int x,int y,int z){
tot++;
e[tot].u=x;
e[tot].v=y;
e[tot].w=z;
}
int dis(Point p1,Point p2){
int ans=std::abs(p1.x-p2.x)+std::abs(p1.y-p2.y)+std::abs(p1.z-p2.z);
ans*=Y;
if (p1.z<p2.z) ans+=Z;
return ans;
}
int directedMST(int rt){
int res=;
while (){
for (int i=;i<n;i++) In[i]=inf;
for (int i=;i<=tot;i++){
int u=e[i].u,v=e[i].v;
if (u!=v&&In[v]>e[i].w) In[v]=e[i].w,pre[v]=u;
}
for (int i=;i<n;i++){
if (i==rt) continue;
if (In[i]==inf) return -;
}
int cnt=;
for (int i=;i<n;i++) vis[i]=id[i]=-;
In[rt]=;
for (int i=;i<n;i++){
res+=In[i];
int v=i;
while (vis[v]!=i&&id[v]==-&&v!=rt){
vis[v]=i;
v=pre[v];
}
if (v!=rt&&id[v]!=-){
for (int j=pre[v];j!=v;j=pre[j]){
id[j]=cnt;
}
id[v]=cnt++;
}
}
if (cnt==) return res;
for (int i=;i<n;i++) if (id[i]==-) id[i]=cnt++;
int all=;
for (int i=;i<=tot;i++){
int v=e[i].v,u=e[i].u;
e[i].u=id[u];
e[i].v=id[v];
if (e[i].u!=e[i].v)
e[i].w-=In[v],e[++all]=e[i];
}
tot=all;
n=cnt;rt=id[rt];
}
return res;
}
int main(){
while (scanf("%d%d%d%d",&n,&X,&Y,&Z)!=EOF&&n){
if (!n&&!X&&!Y&&!Z) return ;
for (int i=;i<=n;i++) scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
for (int i=;i<=n;i++){
int k,x;
scanf("%d",&k);
while (k--){
scanf("%d",&x);
if (x==i) continue;
insert(i,x,dis(p[i],p[x]));
}
insert(,i,p[i].z*X);
}
n++;
int Ans=directedMST();
printf("%d\n",Ans);
}
}

HDU 4009 Transfer water的更多相关文章

  1. HDU 4009——Transfer water——————【最小树形图、不定根】

    Transfer water Time Limit:3000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64u Subm ...

  2. hdu 4009 Transfer water(最小型树图)

    Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)To ...

  3. HDU - 4009 - Transfer water 朱刘算法 +建立虚拟节点

    HDU - 4009:http://acm.hdu.edu.cn/showproblem.php?pid=4009 题意: 有n户人家住在山上,现在每户人家(x,y,z)都要解决供水的问题,他可以自己 ...

  4. HDU 4009 Transfer water(最小树形图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4009 题意:给出一个村庄(x,y,z).每个村庄可以挖井或者修建水渠从其他村庄得到水.挖井有一个代价, ...

  5. HDU 4009 Transfer water 最小树形图

    分析:建一个远点,往每个点连建井的价值(单向边),其它输水线按照题意建单向边 然后以源点为根的权值最小的有向树就是答案,套最小树形图模板 #include <iostream> #incl ...

  6. HDOJ 4009 Transfer water 最小树形图

    Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) T ...

  7. HDU4009:Transfer water(有向图的最小生成树)

    Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)To ...

  8. HDU 5832 A water problem(某水题)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

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

    hdu 2121 题目:给出m条有向路,根不确定,求一棵最小的有向生成树. 分析:增加一个虚拟节点,连向n个节点,费用为inf(至少比sigma(cost_edge)大).以该虚拟节点为根求一遍最小树 ...

随机推荐

  1. Sessions, Window Stations and Desktops(GetDesktopWindow函数得到的桌面句柄, 是Csrss.exe创建的一个窗口)

    由于不是搞安全的,对这块的东西一直不是很清楚,今天特意整理下. 总的来说,他们的关系如下: 我们知道Windows是支持多用户的,Session可以理解为每个用户登录,比如当前登录和远程登陆.Wind ...

  2. asp.net 管道模型+生命处理周期

    http://www.cnblogs.com/qianlifeng/archive/2010/12/16/1908568.html https://msdn.microsoft.com/zh-cn/l ...

  3. Unit Test相关问题汇总

    1.测试私有方法(1)使用反射 public class Calcutate { public int test() { return add(2, 3); } private int add(int ...

  4. java集合经常出现空指针问题的解决方案

    我自己问自己这个问题的时候都把自己给雷住了,但是现实如此,经常写的程序就是出现空指针的错误. 如: public List add(){ List list=null; try { list=new ...

  5. BZOJ1532: [POI2005]Kos-Dicing

    1532: [POI2005]Kos-Dicing Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1060  Solved: 321[Submit][St ...

  6. 【转】Date类学习总结(Calendar Date 字符串 相互转换 格式化)

    原文网址:http://www.blogjava.net/jerry-zhaoj/archive/2008/10/08/233228.html Date类学习总结 1.计算某一月份的最大天数 Cale ...

  7. PHP关于时区问题

    最近在学习PHP过程中发现PHP中的格式化时间戳比北京时间晚了8个小时,上网搜索发现原来是时区不对,解决办法是:      1.永久修改           更改php.ini文件中的data.tim ...

  8. Apache+php配置 Mysql安装出错解决办法

    此文包括的注意内容:软件版本及下载地址Apache2.4的配置和安装php7.0的配置mysql5.5的安装常见问题及解决方法1.软件版本Windows server 2008 r2+ 64位Apac ...

  9. (转)iOS7界面设计规范(13) - UI基础 - 与iOS的系统整合

    突然就到了周日傍晚.你永远不会知道自己的生活在接下来的一周当中能够发生多少变化:各种不可预知性所带来的更多是快感还是焦虑与不安,冷暖自知.相比之下,白天工作当中那些需求列表与排期文档就显得那么可爱了, ...

  10. javascript实现的手风琴折叠菜单效果

    演示地址:http://codepen.io/anon/pen/pJERMq 实现效果: HTML代码: <!DOCTYPE html> <html lang="en&qu ...