hdu4009最小树形图
多建一个根,连到每一个点,然后花费是建水井的钱
然后跑一边最小树形图即可,这题必定有解,因为可以从根开始到每一点,可以不用判无解的情况
#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define MIN(a,b) a<b ? a:b using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f3f; struct edge{
int u,v,w;
}e[maxn];
struct pe{
int x,y,z;
}p[N];
int pre[N],in[N],vis[N];
int ans,Hash[N];
int dis(int a,int b)
{
return abs(p[a].x-p[b].x)+abs(p[a].y-p[b].y)+abs(p[a].z-p[b].z);
}
bool dirmst(int root,int nv,int ne)
{
ans=;
while(){
memset(in,inf,sizeof in);
for(int i=;i<ne;i++)
{
int u=e[i].u,v=e[i].v;
if(e[i].w<in[v]&&u!=v)
{
in[v]=e[i].w;
pre[v]=u;
}
}
in[root]=;
for(int i=;i<nv;i++)
if(in[i]==inf)
return ;
int cntnum=;
memset(vis,-,sizeof vis);
memset(Hash,-,sizeof Hash);
for(int i=;i<nv;i++)
{
ans+=in[i];
int v=i;
while(vis[v]!=i&&v!=root&Hash[v]==-)vis[v]=i,v=pre[v];
if(v!=root&&Hash[v]==-)
{
for(int u=pre[v];u!=v;u=pre[u])
Hash[u]=cntnum;
Hash[v]=cntnum++;
}
}
if(cntnum==)return ;
for(int i=;i<nv;i++)
if(Hash[i]==-)
Hash[i]=cntnum++;
for(int i=;i<ne;i++)
{
int v=e[i].v;
e[i].v=Hash[e[i].v];
e[i].u=Hash[e[i].u];
if(e[i].v!=e[i].u)e[i].w-=in[v];
}
nv=cntnum;
root=Hash[root];
}
return ;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n,x,y,z;
while(cin>>n>>x>>y>>z){
if(n==&&x==&&y==&&z==)break;
for(int i=;i<=n;i++)cin>>p[i].x>>p[i].y>>p[i].z;
int cnt=;
for(int i=;i<=n;i++)
{
int k,s;
cin>>k;
while(k--){
cin>>s;
e[cnt].u=i;
e[cnt].v=s;
e[cnt].w=dis(i,s)*y;
if(p[s].z>p[i].z)e[cnt].w+=z;
cnt++;
}
}
for(int i=;i<=n;i++)
{
e[cnt].u=;
e[cnt].v=i;
e[cnt].w=x*p[i].z;
cnt++;
}
dirmst(,n+,cnt))
cout<<ans<<endl;
}
return ;
}
hdu4009最小树形图的更多相关文章
- hdu4009最小树形图板子题
/*调了一下午的最小树形图,昨天刚刚看懂模板..最小树形图,就是有向图的最小生成树,很神奇==*/ #include<iostream> #include<cstring> # ...
- HDU4009 Transfer water —— 最小树形图 + 不定根 + 超级点
题目链接:https://vjudge.net/problem/HDU-4009 Transfer water Time Limit: 5000/3000 MS (Java/Others) Me ...
- 最小树形图(hdu4009)
Transfer water Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) T ...
- hdu4009 Transfer water 最小树形图
每一户人家水的来源有两种打井和从别家接水,每户人家都可能向外输送水. 打井和接水两种的付出代价都接边.设一个超级源点,每家每户打井的代价就是从该点(0)到该户人家(1~n)的边的权值.接水有两种可能, ...
- HDU4009 Transfer water 【最小树形图】
Transfer water Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) T ...
- POJ 3164 Command Network 最小树形图模板
最小树形图求的是有向图的最小生成树,跟无向图求最小生成树有很大的区别. 步骤大致如下: 1.求除了根节点以外每个节点的最小入边,记录前驱 2.判断除了根节点,是否每个节点都有入边,如果存在没有入边的点 ...
- 树的问题小结(最小生成树、次小生成树、最小树形图、LCA、最小支配集、最小点覆盖、最大独立集)
树的定义:连通无回路的无向图是一棵树. 有关树的问题: 1.最小生成树. 2.次小生成树. 3.有向图的最小树形图. 4.LCA(树上两点的最近公共祖先). 5.树的最小支配集.最小点覆盖.最大独立集 ...
- hdu2121 Ice_cream’s world II 最小树形图(难)
这题比HDU4009要难一些.做了4009,大概知道了最小树形图的解法.拿到这题,最直接的想法是暴力.n个点试过去,每个都拿来做一次根.最后WA了,估计是超时了.(很多题都是TLE说成WA,用了G++ ...
- bzoj4349: 最小树形图
最小树形图模板题…… 这种\(O(nm)\)的东西真的能考到么…… #include <bits/stdc++.h> #define N 60 #define INF 1000000000 ...
随机推荐
- 生信-cufflinks输入输出文件分析
转自:https://wenku.baidu.com/view/8d6a95d20d22590102020740be1e650e52eacf2a.html 输出包含3个文件:转录组的组装.gtf ...
- 记录:python读取excel文件
由于最近老是用到python读取excel文件,所以特意记录一下python读取excel文件的大体框架. 库:xlrd(读),直接pip安装即可.想要写excel文件的话,安装xlwd库即可,也是直 ...
- rabbitmq报错type
TypeError: exchange_declare() got an unexpected keyword argument 'type' 原因应该为pika版本不同导致的用法不同,解决方法为把t ...
- python的数据类型的有序无序
列表有序可变 字典无序不可变 元组不可变 集合无序不可变 数字不可变 字符串不可变
- sidekiq安装及使用
参考:https://github.com/mperham/sidekiq/wiki/Getting-Started https://wdxtub.com/2016/07/06/sidekiq-gui ...
- java环境变量及Eclipse自动编译问题
环境变量,是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路 ...
- 运维自动化之salt笔记
1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...
- [转]美国最大婚恋交友网站eHarmony的机器学习实践
转自:http://www.csdn.net/article/2015-03-19/2824267 上周,我去洛杉矶参加了一个机器学习的meetup,一位主讲是eHarmony公司(美国最大的婚恋交友 ...
- iOS 提升代码的安全性,可以做哪些措施???
希望能尽量防止别人 反编译你的代码: 目前苹果审核规则可知,苹果官方是不希望你使用代码混淆的...如果发现了你用代码混淆,甚至会勒令你修改你的代码,否则下一次审核会直接移除你的app…尤其是跑脚本的那 ...
- C# DateTime 获取时间方法,网上收集
DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Convert.ToInt32(dt.DayOfWeek.T ...