[BZOJ4349]最小树形图
时间:2019-03-26
本文章向大家介绍[BZOJ4349]最小树形图,主要包括[BZOJ4349]最小树形图使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
显然先选每个点都取一遍然后再取满次数最优,用最小树形图决定第一次取的顺序。
朱刘算法的流程是(总复杂度O(nm)):
1.对除根外所有点,找到所有指向它的边中权值最小的那一条,记其权值为ind[]。
2.找到所有不包含根的、由(1)中找到的那些边构成的环,并将环缩点。若没有这样的环则结束。
3.将所有缩点后不是自环的边的权值,减去边的终点的ind。
主要思路就是贪心+调整,具体看代码实现。
1 #include<cstdio> 2 #include<algorithm> 3 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 4 using namespace std; 5 6 const int N=61,M=21000; 7 const double inf=1e10; 8 int n=1,m,m1,n1,x,y,cnt,num[N],pos[N],pre[N],id[N],vis[N]; 9 double a[N],ans,v,ind[N]; 10 struct E{ int u,v; double w; }e[M]; 11 12 double Zhuliu(int rt,int n,int m){ 13 int tn,tm; double res=0; 14 while (1){ 15 rep(i,1,n) ind[i]=inf,pre[i]=id[i]=vis[i]=0; 16 tn=tm=ind[rt]=0; 17 rep(i,1,m) if (e[i].w<ind[e[i].v]) ind[e[i].v]=e[i].w,pre[e[i].v]=e[i].u; 18 rep(i,1,n){ 19 int x=i; res+=ind[i]; 20 while (x!=rt && vis[x]!=i && !id[x]) vis[x]=i,x=pre[x]; 21 if (x!=rt && !id[x]){ 22 id[x]=++tn; 23 for (int k=pre[x]; k!=x; k=pre[k]) id[k]=tn; 24 } 25 } 26 if (!tn) break; 27 rep(i,1,n) if (!id[i]) id[i]=++tn; 28 rep(i,1,m) if (id[e[i].u]!=id[e[i].v]) e[++tm]=(E){id[e[i].u],id[e[i].v],e[i].w-ind[e[i].v]}; 29 n=tn; m=tm; rt=id[rt]; 30 } 31 return res; 32 } 33 34 int main(){ 35 freopen("bzoj4349.in","r",stdin); 36 freopen("bzoj4349.out","w",stdout); 37 scanf("%d",&n1); 38 rep(i,1,n1){ 39 scanf("%lf%d",&v,&x); 40 if (x) pos[i]=++n,e[++m]=(E){1,n,v},a[n]=v,num[n]=x-1; 41 } 42 scanf("%d",&m1); 43 rep(i,1,m1){ 44 scanf("%d%d%lf",&x,&y,&v); 45 if (!pos[x] || !pos[y]) continue; 46 e[++m]=(E){pos[x],pos[y],v}; a[pos[y]]=min(a[pos[y]],v); 47 } 48 rep(i,2,n) ans+=a[i]*num[i]; 49 printf("%.2lf\n",Zhuliu(1,n,m)+ans); 50 return 0; 51 }
- FileSystemWatcher 导致Mono ASP.NET应用程序CPU使用率比较高
- 网卡收包流程
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Terminal &zsh &oh-my-zsh配置
- 【Python量化投资】基于网格优化、遗传算法对CTA策略进行参数优化
- 将我的 Windows Phone 应用程序更新到 Windows Phone 8
- 绑定子类的泛型基类,反模式?
- 给创业码农的话--如何提升开发效率
- 基于OEA框架的客户化设计(二) 元数据设计
- 自定义actionbar
- (转)JS算法系列-数组去重
- 基于OEA框架的客户化设计(三) “插件式”DLL
- 居中“魔法”总结
- Windows微信DPI适配
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 参数注解所引发的思考
- kali安装webdav服务
- NiFi.java 源码解读
- Spring,Spring MVC及Spring Boot区别
- RunNiFi.java 源码解读
- nifi.sh 脚本解读
- 关于当前PHP脚本运行时系统信息相关函数
- NIFI启动源码解读
- 高并发系统三大利器之降级
- 简单学习PHP中的层次性能分析器
- 常见乱码问题分析
- 深入理解 Vue 模板渲染:Vue 模板反编译
- 彻底搞懂 etcd 系列文章(七):etcd gRPC 服务 API
- NIFI 开发注解详述
- [已解决]java请求爬取https网站报错javax.net.ssl.SSLHandshakeException的解决办法