题目链接: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. 代理模式 - OK

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式的优点: ...

  2. Visual Studio 启动加速

    Who is locking my SQL database?|Deploy a database project with TFS Build Visual Studio 2012 running ...

  3. smarty 内置函数if 等判断

    {if},{elseif},{else} Smarty的{if}条件判断和PHP的if 非常相似,只是增加了一些特性. 每个{if}必须有一个配对的{/if}. 也可以使用{else} 和 {else ...

  4. BZOJ1270: [BeijingWc2008]雷涛的小猫

    1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 836  Solved: 392[Submit][ ...

  5. 【转】android 开发 命名规范

    原文网址:http://www.cnblogs.com/ycxyyzw/p/4103284.html 标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外, ...

  6. Permutations 解答

    Question Given a collection of numbers, return all possible permutations. For example,[1,2,3] have t ...

  7. 初探HTML

    就在今天我抱着试一试的态度稍微看了下HTML5, 尝试着接触一点新知识, 虽然学的并不多, 但是还是异常的兴奋, 感觉有好多东西和之前的不一样了, 包括控件的创建和一些属性的设置等, 总之这些变化与改 ...

  8. oracle(天猫处方药留言sql)

    " ?> .dtd" > <sqlMap namespace="TmallTcMessage"> <typeAlias alias ...

  9. (转)用来理解Java的8个图表

    很多时候,一张图比你说 1000 个字能更有效的说清楚一个问题.我们列举了 8 个关于 Java 语言的图表,或许可以让你对 Java 有着更深入的认识. 1.字符串不变性(String Immuta ...

  10. Web Api 跨域解决方案

    一.跨域问题的由来 同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容. 正是由于这个原因,我们不同项目之间的调用就会被浏览器阻 ...