题目链接: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. Use OWIN to Self-Host ASP.NET Web API 2

      Open Web Interface for .NET (OWIN)在Web服务器和Web应用程序之间建立一个抽象层.OWIN将网页应用程序从网页服务器分离出来,然后将应用程序托管于OWIN的程序 ...

  2. VS2010安装与测试编译问题(fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt)

    由于第三方库的各种原因,与编译冲突问题,公司又决定把整个项目都统一改用VS2010来编译.所以我把我开发机上的VS2008卸载了,又重新安装了VS2010.无奈出现了COFF格式转换问题.搜索了下.完 ...

  3. bzoj1188

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1188 一道非常好的SG函数题,加深了对博弈论的理解. 以前做的SG函数的题,都是每个瓶子看成一 ...

  4. hdu1695:数论+容斥

    题目大意: 求x属于[1,b]和 y属于[1,d]的 gcd(x,y)=k 的方案数 题解: 观察发现 gcd()=k 不好处理,想到将x=x/k,y=y/k 后 gcd(x,y)=1.. 即问题转化 ...

  5. Android 通过外键连接两个数据库

    Learn: 1.Android数据库的语法. 2.通过外键连接两个数据库. 3.加强了对数据库的熟悉度. 4.对文本框的visiblity属性的了解. Demo:http://pan.baidu.c ...

  6. phpcms:六、频道页(category.html)

    1.当前栏目的ID:{$catid}标题样式:{title_style($v[style])}(在添加内容或编辑内容的时候,标题右边 有一个选择颜色的块).{str_cut(strip_tags($v ...

  7. pyqt托盘例子

    # -*- coding: cp936 -*- #!/usr/bin/env python # -*- coding:utf-8 -*- from PyQt4 import QtCore, QtGui ...

  8. text-overflow简单使用

    text-overflow属性配合overflow才有效果,还记得把文字强制一行显示,如下代码: <!DOCTYPE html> <html lang="zh-cn&quo ...

  9. (转载)XML Tutorial for iOS: How To Choose The Best XML Parser for Your iPhone Project

    There are a lot of options when it comes to parsing XML on the iPhone. The iPhone SDK comes with two ...

  10. altium designer 原理图复制出错

    复制原理图的时候最后弹出这种错误 InvalidParameter at 2510219C. AdvSch.dll, Base Address: 24C80000. Exception Occurre ...