hdu4009最小树形图板子题
/*
调了一下午的最小树形图,昨天刚刚看懂模板。。
最小树形图,就是有向图的最小生成树,很神奇==
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define MAXN 1002
#define INF 0x3f3f3f3f
using namespace std;
struct Node{
int x,y,z;
}nodes[MAXN];
struct Edge{
int u,v,w;
}e[MAXN*MAXN];
int tot;
int dist(int a,int b,int y,int z){
int res=;
res+=abs(nodes[a].x-nodes[b].x)*y+abs(nodes[a].y-nodes[b].y)*y+abs(nodes[a].z-nodes[b].z)*y;
if(nodes[a].z<nodes[b].z)
res+=z;
return res;
} int pre[MAXN],id[MAXN],visit[MAXN],in[MAXN];
int zhuliu(int root,int n,int m){
int res=,u,v;
while(){
for(int i=;i<n;i++)
in[i]=INF;
//建立最小弧集E
for(int i=;i<m;i++)
if(e[i].u!=e[i].v && e[i].w<in[e[i].v]){
pre[e[i].v]=e[i].u;
in[e[i].v]=e[i].w;
}
for(int i=;i<n;i++)
if(i!=root && in[i]==INF)
return -;//不存在最小树形图 int tn=;
memset(id,-,sizeof id);
memset(visit,-,sizeof visit);
in[root]=;
for(int i=;i<n;i++){//找环染色
res+=in[i];
v=i;
while(visit[v]!=i && id[v]==- && v!=root){
visit[v]=i;
v=pre[v];
}//找环
if(v!=root && id[v]==-){
for(int u=pre[v];u!=v;u=pre[u])
id[u]=tn;
id[v]=tn++;
}//染色
}
if(tn==)//没有环
break; for(int i=;i<n;i++)//给没有环的点染色
if(id[i]==-)
id[i]=tn++;
for(int i=;i<m;){//
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];
else
swap(e[i],e[--m]);
} n=tn;//剩下tn个点
root=id[root];
}
return res;
} int main(){
int n,x,y,z,k,v;
while(scanf("%d%d%d%d",&n,&x,&y,&z)!=EOF && n){
tot=;
for(int i=;i<=n;i++)
scanf("%d%d%d",&nodes[i].x,&nodes[i].y,&nodes[i].z);
for(int u=;u<=n;u++){
scanf("%d",&k);
while(k--){
scanf("%d",&v);
e[tot].u=u;
e[tot].v=v;
e[tot].w=dist(u,v,y,z);
tot++;
}
} int root=;
for(int i=;i<=n;i++){
e[tot].u=root;
e[tot].v=i;
e[tot].w=x*nodes[i].z;
tot++;
} printf("%I64d\n",zhuliu(root,n+,tot));
}
return ;
}
hdu4009最小树形图板子题的更多相关文章
- poj3164 最小树形图板子题
/* 思路很简单,也不知道哪里错了TAT */ /* N个点通过笛卡尔坐标表示 根节点是1,求最小树形图 */ #include<iostream> #include<cstdio& ...
- hdu4009最小树形图
多建一个根,连到每一个点,然后花费是建水井的钱 然后跑一边最小树形图即可,这题必定有解,因为可以从根开始到每一点,可以不用判无解的情况 #include<map> #include< ...
- 最小割板子题——[USACO5.4]奶牛的电信
今天邱神给我们讲了图论,还讲了一下网络流算法.自己找了一个洛谷板子题. 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果 ...
- POJ 3164 Command Network(最小树形图模板题+详解)
http://poj.org/problem?id=3164 题意: 求最小树形图. 思路: 套模板. 引用一下来自大神博客的讲解:http://www.cnblogs.com/acjiumeng/p ...
- poj3164最小树形图模板题
题目大意:给定一个有向图,根节点已知,求该有向图的最小树形图.最小树形图即有向图的最小生成树,定义为:选择一些边,使得根节点能够到达图中所有的节点,并使得选出的边的边权和最小. 题目算法:朱-刘算法( ...
- hdu 4009 最小树形图模板题朱刘算法
#include<stdio.h> /*思路:显然对于每个地方, 只有一种供水方式就足够了,这样也能保证花费最小, 而每个地方都可以自己挖井,所以是不可能出现无解的情况的, 为了方便思考, ...
- uva11183 最小树形图模板题
很简单的模板题,不多说了 #include<iostream> #include<cstring> #include<cstdio> #define INF 0x3 ...
- 【刷题】洛谷 P4716 【模板】最小树形图
题目背景 这是一道模板题. 题目描述 给定包含 \(n\) 个结点, \(m\) 条有向边的一个图.试求一棵以结点 \(r\) 为根的最小树形图,并输出最小树形图每条边的权值之和,如果没有以 \(r\ ...
- bzoj4349: 最小树形图
最小树形图模板题…… 这种\(O(nm)\)的东西真的能考到么…… #include <bits/stdc++.h> #define N 60 #define INF 1000000000 ...
随机推荐
- 安装.src.rpm
.src.rpm在坟墓镜像中能找到,例如6.8 os 的rpm包的.src.rpm格式就存放在http://vault.centos.org/6.8/os/Source/ .src.rpm是源码包,是 ...
- LR的损失函数&为何使用-log损失函数而非平方损失函数
https://blog.csdn.net/zrh_CSDN/article/details/80934278 Logistic回归的极大似然估计求解参数的推导: https://blog.csdn. ...
- java实现在线浏览PDF文档功能
实现在线浏览pdf文档功能(本代码适用于项目服务中固定的并且少量的pdf浏览,比如注册时的注册条款在线浏览等): //设置响应内容类型为PDF类型 response.setContentType(&q ...
- SpringMVC中前后端Date交互
建议使用时间戳来避免日期格式带来的前后端问题,使用时间戳可以避免前后端.平台等问题. new Date().getTime()
- Python全栈(第一部分)day2
昨日内容回顾 编译型:一次性将全部代码编译成二进制文件 代表语言: C,C++ 优点:执行效率高 缺点:开发速度慢,不能跨平台 解释型:当程序运行时,从上至下一行一行的解释成二进制 优点:开发速度快, ...
- 2018 Multi-University Training Contest 2 杭电多校第二场
开始逐渐习惯被多校虐orz 菜是原罪 1004 Game (hdoj 6312) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312 虽然披着 ...
- Go语言中的map
map是一个集合,可以使用类似处理数组和切片的方式迭代map中的元素.但map是无序的集合.无序的原因是map的实现使用了散列表. map的创建并初始化主要是两种方式: 1.内置的make函数 2.使 ...
- MySQL用户授权【转】
MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant selec ...
- 激活函数Sigmoid、Tanh、ReLu、softplus、softmax
原文地址:https://www.cnblogs.com/nxf-rabbit75/p/9276412.html 激活函数: 就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端. 常见 ...
- oracle 多行变一行 wmsys.wm_concat
背景 还是那个问题,部分程序员喜欢用sql解决问题.发现了这个函数,当初真是大喜过望,现在是哭笑不得.10g支持这个函数,11好像不支持了,而且只有oracle支持,其实自己写个通用方法 ...