HDU 4009 Transfer water(最小树形图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4009
题意:给出一个村庄(x,y,z)。每个村庄可以挖井或者修建水渠从其他村庄得到水。挖井有一个代价,修水渠有一个代价。另外A村庄只能向其指定的一些村庄供水。使得所有村庄有水求最小代价。
思路:增加虚拟点0,向所有点连边表示挖井。能连边的连边。求最小树形图即可。
struct point
{
int x,y,z;
};
struct edge
{
int u,v,w;
};
point p[N];
edge e[N*N];
int eCnt,n,pre[N],id[N],in[N],visit[N];
void add(int u,int v,int w)
{
e[eCnt].u=u;
e[eCnt].v=v;
e[eCnt++].w=w;
}
int directedMST(int root)
{
int ans=0,nv=n,i;
while(1)
{
for(i=0;i<nv;i++) in[i]=INF;
for(i=0;i<eCnt;i++)
{
int u=e[i].u;
int v=e[i].v;
if(u!=v&&e[i].w<in[v])
{
in[v]=e[i].w;
pre[v]=u;
}
}
for(i=0;i<nv;i++)
{
if(i!=root&&inf==in[i]) return -1;
}
int nodeCnt=0;
for(i=0;i<nv;i++) id[i]=visit[i]=-1;
in[root]=0;
for(i=0;i<nv;i++)
{
ans+=in[i];
int v=i;
while(visit[v]!=i&&id[v]==-1&&v!=root)
{
visit[v]=i;
v=pre[v];
}
if(v!=root&&-1==id[v])
{
int u;
for(u=pre[v];u!=v;u=pre[u]) id[u]=nodeCnt;
id[v]=nodeCnt++;
}
}
if(0==nodeCnt) break;
for(i=0;i<nv;i++) if(-1==id[i]) id[i]=nodeCnt++;
for(i=0;i<eCnt;i++)
{
int v=e[i].v;
e[i].u=id[e[i].u];
e[i].v=id[e[i].v];
if(e[i].u!=e[i].v) e[i].w-=in[v];
}
nv=nodeCnt;
root=id[root];
}
return ans;
}
int X,Y,Z;
int Dis(point a,point b)
{
int dis=abs(a.x-b.x)+abs(a.y-b.y)+abs(a.z-b.z);
dis*=Y;
if(a.z<b.z) dis+=Z;
return dis;
}
int main()
{
while(scanf("%d%d%d%d",&n,&X,&Y,&Z)!=EOF)
{
if(!n&&!X&&!Y&&!Z) break;
int i,j,u,v;
n++;
for(i=1;i<n;i++) scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
eCnt=0;
for(i=1;i<n;i++)
{
int k;
scanf("%d",&k);
while(k--)
{
int t;
scanf("%d",&t);
if(t==i) continue;
add(i,t,Dis(p[i],p[t]));
}
add(0,i,p[i].z*X);
}
printf("%d\n",directedMST(0));
}
return 0;
}
HDU 4009 Transfer water(最小树形图)的更多相关文章
- HDU 4009 Transfer water 最小树形图
分析:建一个远点,往每个点连建井的价值(单向边),其它输水线按照题意建单向边 然后以源点为根的权值最小的有向树就是答案,套最小树形图模板 #include <iostream> #incl ...
- HDOJ 4009 Transfer water 最小树形图
Transfer water Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) T ...
- HDU 4009——Transfer water——————【最小树形图、不定根】
Transfer water Time Limit:3000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64u Subm ...
- HDU4009 Transfer water —— 最小树形图 + 不定根 + 超级点
题目链接:https://vjudge.net/problem/HDU-4009 Transfer water Time Limit: 5000/3000 MS (Java/Others) Me ...
- HDU - 4009 - Transfer water 朱刘算法 +建立虚拟节点
HDU - 4009:http://acm.hdu.edu.cn/showproblem.php?pid=4009 题意: 有n户人家住在山上,现在每户人家(x,y,z)都要解决供水的问题,他可以自己 ...
- hdu 2121 , hdu 4009 无定根最小树形图
hdu 2121 题目:给出m条有向路,根不确定,求一棵最小的有向生成树. 分析:增加一个虚拟节点,连向n个节点,费用为inf(至少比sigma(cost_edge)大).以该虚拟节点为根求一遍最小树 ...
- hdu 4009 Transfer water(最小型树图)
Transfer water Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)To ...
- hdu4009 Transfer water 最小树形图
每一户人家水的来源有两种打井和从别家接水,每户人家都可能向外输送水. 打井和接水两种的付出代价都接边.设一个超级源点,每家每户打井的代价就是从该点(0)到该户人家(1~n)的边的权值.接水有两种可能, ...
- HDU 4009 Transfer water
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4009 题意:给出一个村庄(x,y,z).每个村庄可以挖井或者修建水渠从其他村庄得到水.挖井有一个代价, ...
随机推荐
- Elasticsearch 核心术语概念
Elasticsearch 相当于一个关系型数据库 索引 index 类型 type 文档 document 字段 fields 跟关系型数据库对比 Elasticsearch 相当于一个数据库 索引 ...
- C++头文件应该干的事情
C++头文件应该干的事情 最近在写自己项目的时候,头文件老是编译错误,后来发现还是对头文件掌握不牢. 头文件应该干什么? 所谓的头文件,其实它的内容跟 .cpp 文件中的内容是一样的,都是 C++ 的 ...
- java中的动手动脑
1.关于构造函数的问题 为什么上面的代码不能通过编译? 因为当你没有定义构造函数时,java编译器在编译时会自动生成一个无参的构造函数,上面的代码就可以进行执行了.但是当你顶一个构造函数时,编译器将不 ...
- django->model模型操作(数据库操作)
一.字段类型 二.字段选项说明 三.内嵌类参数说明abstract = Truedb_table = 'table_name' #表名,默认的表名是app_name+类名ordering = ['id ...
- JAVA debug 断点调试
更多调试参看 https://www.cnblogs.com/yjd_hycf_space/p/7483471.html 先编译好要调试的程序.1.设置断点 选定要设置断点的代码行,在行号的区域后面单 ...
- "五号标题"组件:<h5> —— 快应用组件库H-UI
 <import name="h5" src="../Common/ui/h-ui/text/c_h5"></import> < ...
- 05-CSV文件读取(问题)
1.支持.txt,.log,.json三种格式 并且也支持.csv格式文件类型----.csv在使用时会出现乱码情况 2.当时遇到问题: CSV文件.txt文本内有数据,如:user ,pwd adm ...
- AJ学IOS 之小知识之xcode6自动提示图片插件 KSImageNamed的安装
AJ分享,必须精品 一:首先看效果 KSImageNamed是让XCode能预览项目中图片的插件 很牛逼,据说写这个插件的牛人在日本~ 主要针对imageNamed:方法 效果如图: 安装: 首先需要 ...
- stand up meeting 1/7/2016
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 调研下滑条的存在问题,尝试替换方案 6 全面实行替换 ...
- Java Instrumentation插桩技术学习
Instrumentation基础 openrasp中用到了Instrumentation技术,它的最大作用,就是类的动态改变和操作. 使用Instrumentation实际上也可以可以开发一个代理来 ...