最小树形图问题啊

最小树形图是撒哩,就是给你一个有向图,确定一个根,要你到达所有点,那棵最短路径树的总边权

做这个用的是朱(jv)刘(lao)算法。

首先假如有多个联通块就无解啦

对应每个点(除了根),找到一条连向它的最短的边,假如没有环,那这个就是答案嘛

否则就找环,然后缩点,对于一个环,假如要从它的一个成员节点x断开,那么答案是减去环上的边,然后加上连进来的边,那么我们就把所有连向x的边的权,减去环上这条边的权(感觉很像数据备份退流的思想)

不断重复直到没有环。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;struct edge{int x,y;double d;}a[11000];int len;
void ins(int x,int y,double d)
{len++;a[len].x=x;a[len].y=y;a[len].d=d;
}
double rch[110];int pre[110];
int bel[110],fr[110];
double directed_MST(int n,int rt)
{double ans=0;while(1){memset(rch,0x7f,sizeof(rch));for(int i=1;i<=len;i++)if(a[i].x!=a[i].y&&rch[a[i].y]>a[i].d)pre[a[i].y]=a[i].x, rch[a[i].y]=a[i].d;rch[rt]=0;for(int i=1;i<=n;i++)if(rch[i]==0x7f)return -1;memset(bel,0,sizeof(bel));memset(fr,0,sizeof(fr));int cnt=0;for(int i=1;i<=n;i++){ans+=rch[i];int k=i;while(fr[k]!=i&&bel[k]==0&&k!=rt) fr[k]=i, k=pre[k];if(bel[k]==0&&k!=rt){cnt++;int t=k;do{bel[k]=cnt;k=pre[k];}while(k!=t);}}if(cnt==0)return ans;for(int i=1;i<=n;i++)if(bel[i]==0)bel[i]=++cnt;for(int i=1;i<=len;i++){if(bel[a[i].x]!=bel[a[i].y])a[i].d-=rch[a[i].y];a[i].x=bel[a[i].x],a[i].y=bel[a[i].y];}n=cnt,rt=bel[rt];}
}int tp,id[110];
int cp[110];double cnm[110];
int main()
{int n,m,x,y,pp;double dd;scanf("%d",&n);tp=0;for(int i=1;i<=n;i++){scanf("%lf%d",&dd,&pp);if(pp>0){id[i]=++tp;cnm[id[i]]=dd;cp[id[i]]=pp;}}n=tp+1;len=0;for(int i=1;i<n;i++)ins(n,i,cnm[i]);scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d%d%lf",&x,&y,&dd);if(cp[id[x]]>0&&cp[id[y]]>0){ins(id[x],id[y],dd);cnm[id[y]]=min(cnm[id[y]],dd);}}double ans=directed_MST(n,n);for(int i=1;i<n;i++)ans+=(double(cp[i]-1))*cnm[i];printf("%.2lf\n",ans);return 0;
}

转载于:https://www.cnblogs.com/AKCqhzdy/p/9525979.html

bzoj2260: 商店购物4349: 最小树形图相关推荐

  1. 最小树形图(bzoj 4349: 最小树形图 2260: 商店购物)

    最小树形图: 可以理解为对有向图求最小生成树,其中最小生成树的根为固定的某个点 朱-刘算法大致步骤: ①去掉所有重边 ②除了根之外对于每个点,只保留所有以它为终点的边中最短的一条,记bet[]为那条边 ...

  2. bzoj 4349: 最小树形图 朱-刘算法

    最裸的最小树形图(←现在才学的弱渣). 显然只需要打一下一个堡垒,然后剩下的可以最后用最小的代价再打. 然后只要把图建出来跑一下朱-刘算法即可. 简单讲一下朱-刘算法吧(思想还是很简单的),下面只考虑 ...

  3. 最小树形图及其生产方法

    诸位看官,这是我第一次在整篇文章的所有图片里面加水印.小弟写博客的时间不长,就有两篇博客被盗用并未注明原文网址.这一方面使我痛心不已,另一方面迫使我不得不重新考虑一下版权保护问题.小弟不是吝啬鬼,如果 ...

  4. poj3164(最小树形图模版)

    对最小树形图做个小小的总结: 1:清除自环,自环是不可能存在于任何最小树形图中的: 2:求出每个顶点的的最小入边: 3:判断该图是否存在最小树形图,由 1 可以判定,或者以图中顶点v作为根节点遍历该图 ...

  5. HDU6141(最小树形图)

    对最小树形图做个小小的总结: 1:清除自环,自环是不可能存在于任何最小树形图中的: 2:求出每个顶点的的最小入边: 3:判断该图是否存在最小树形图,由 1 可以判定,或者以图中顶点v作为根节点遍历该图 ...

  6. HDU4009(最小树形图)

    对最小树形图做个小小的总结: 1:清除自环,自环是不可能存在于任何最小树形图中的: 2:求出每个顶点的的最小入边: 3:判断该图是否存在最小树形图,由 1 可以判定,或者以图中顶点v作为根节点遍历该图 ...

  7. HDU2121(最小树形图的模版算法题)

    这个道题也是在看了大神之后敲的,我也是刚刚学习这个 ^ _ ^,看来离大佬们的距离还是太远了:以下内容也是在学习大佬讲解的内容之后,根据大佬们的详细讲解中总结出来的! 贪心算法.可以想到每次都找每个点 ...

  8. 模板 - 最小树形图(朱刘算法)

    整理的算法模板合集: ACM模板 目录 给定一个根的有向图的最小树形图 为给定根的树形图 判断无解的方法 给定一个根的有向图的最小树形图 给定包含 n 个结点,m 条有向边的一个图.试求一棵以结点 r ...

  9. 最小树形图复杂度分析

    如果实现得很聪明的话,可以达到找最小入边O(E),找环 O(V),收缩O(E),其中在找环O(V)这里需要一点技巧.这样每次收缩的复杂度是O(E),然后最多会收缩几次呢?由于我们一开始已经拿掉了所有的 ...

  10. TJU 2248. Channel Design 最小树形图

    最小树形图,測模版.... 2248.   Channel Design Time Limit: 1.0 Seconds   Memory Limit: 65536K Total Runs: 2199 ...

最新文章

  1. 深度学习后,图灵奖得主Bengio研究核心是什么?因果表示学习
  2. 一种灵活,坚固且无凝胶的脑电图电极,可用于无创脑机接口
  3. golang打包HTML为Android,使用Go开发Web服务,并打包html/js/css等静态资源文件
  4. 产品经理经验谈50篇(四):数据分析常用方法及应用案例解析
  5. javascript ||用法
  6. HD Piggy-Bank完全背包
  7. 关于EF使用脏读(连接会话开始执行设置隔离级别)
  8. 如何种植屡获殊荣的青豆
  9. java怎么知道上传文件是否成功_文件包含漏洞之——tomcat CVE-2020-1938漏洞复现
  10. linux系统上传下载命令rz和sz
  11. 关于判断后该数据类型是否发生了转变
  12. Zookeeper常用命令详解(Zookeeper3.4.14)
  13. ofo 回应假装老外秒退押金;董明珠雷军十亿赌约到期;高通苹果摩擦再升级 | 极客头条...
  14. mpls工作原理通俗解释_MPLS的工作原理
  15. 免驱 usb有线网卡_2020年末台式机amp;笔记本无线网卡最全选购指南amp;攻略,打造极致WIFI体验!...
  16. Life of Pie 少年派的奇幻漂流
  17. 一切前端概念,都是纸老虎(附送书的抽奖结果)
  18. 阿里云服务器对企业有什么用?
  19. android新浪微博开发Sso登录
  20. PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC

热门文章

  1. iOS精品源码,GHConsole图片浏览器圆形进度条音视频传输连击礼物弹出动画 1
  2. spring、spring-boot配置文件属性内容加解密
  3. InstallShield Limited Edition Project 打包windows服务解析
  4. 【转】LoadRunner中事务和集合点的放置顺序问题
  5. javascript中的this指向问题总结
  6. 在设计DJANGO用户更改密码时,出现NoReverseMatch at /account/password-change/这种妖精如何办?...
  7. Arch Linux 安装 Virtualbox 4.2.0 备忘录
  8. Sql Server2005安装图解
  9. element el-autocomplete组件 自定义传参的解决方法
  10. 服务器注意事项(切记!)