链接:

#include <stdio.h>
int main()
{puts("转载请注明出处[vmurder]谢谢");puts("网址:blog.csdn.net/vmurder/article/details/44935891");
}

我以前的版本

算法构造过程以及傻叉代码+弱版注释见以前博客
http://blog.csdn.net/vmurder/article/details/38819711

最小树形图:

名词解释:

~~~~~~~其实就是有向图的最小生成树,然后需要有一个根(一般默认为1),如果是无根最小树形图,我们可以牺牲时间复杂度, O(n) O(n) 枚举根跑最小树形图。

算法流程:

  1. 对于一张有向图,除了根以外每个点都找一条权值最小的入边(称之为 [最小弧] )
  2. 这样就可能构成了一片由基环树组成的森林,然后我们把每个环都缩点,并根据点的新编号重建图。但是如果没有环(所有点与根连通),则最小树形图已经建成,跳出流程。

如果计算边权:

每次将所有点(根除外)最小弧长度累加,重建图时与x相连的边权值全部减去此最小弧长度,这样就保证了最后一个点的流程中加得的所有最小弧长度等于最后一次加的边的原长度。

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define inf 0x3f3f3f3f
#define N 200
#define M 50000
using namespace std;
struct Fiona
{double x,y;
}s[N];
struct Syndra
{int u,v;double w;
}e[M];
int pre[N],f[N],vis[N];
double l[N];
double dist(Fiona A,Fiona B)
{return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}
double Directed_MST(int root,int n,int m)
{int i,j,k;int u,v,cnt;double ans=0;while(1){for(i=1;i<=n;i++)f[i]=vis[i]=0,l[i]=inf;for(i=1;i<=m;i++){u=e[i].u;v=e[i].v;if(l[v]>e[i].w)pre[v]=u,l[v]=e[i].w;}for(i=1;i<=n;i++)if(l[i]==inf&&i!=root)return -1;l[root]=cnt=0;for(i=1;i<=n;i++){ans+=l[i];if(vis[i])continue;for(v=i;!vis[v]&&v!=root;vis[v]=i,v=pre[v]);if(v!=root&&vis[v]==i){f[v]=++cnt;for(u=pre[v];u!=v;u=pre[u])f[u]=cnt;}}if(!cnt)break;for(i=1;i<=n;i++)if(!f[i])f[i]=++cnt;n=cnt,cnt=0,root=f[root];for(i=1;i<=m;i++){u=e[i].u,v=e[i].v;if(f[u]!=f[v]){e[++cnt].u=f[u];e[cnt].v=f[v];e[cnt].w=e[i].w-l[v];}}m=cnt;}return ans;
}
int main()
{freopen("test.in","r",stdin);int i,n,m;double ans;while(scanf("%d%d",&n,&m)!=EOF){for(i=1;i<=n;i++)scanf("%lf%lf",&s[i].x,&s[i].y);for(i=1;i<=m;i++){scanf("%d%d",&e[i].u,&e[i].v);if(e[i].u!=e[i].v)e[i].w=dist(s[e[i].u],s[e[i].v]);else i--,m--;}ans=Directed_MST(1,n,m);if(ans==-1)printf("poor snoopy\n");else printf("%.2f\n",ans);}return 0;
}

【POJ3164】Command Network 最小树形图模板题 重修版相关推荐

  1. POj 3164 Command Network最小树形图 模板题 朱刘算法

    Command Network After a long lasting war on words, a war on arms finally breaks out between littleke ...

  2. POJ-3164 Command Network 最小树形图

    题目链接:http://poj.org/problem?id=3164 裸的最小树形图,用朱-刘算法解决,具体实现过程如下:算法一开始先判断从固定根开始是否可达所有原图中的点,若不可,则一定不存在最小 ...

  3. POJ 3164 Command Network (最小树形图)

    Command Network Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 10136   Accepted: 2946 ...

  4. POJ-3164 Command Network (朱刘算法)

    这是一道最小树形图的模板题 朱刘算法开始时的确不是太好理解,在网上看了好多文章才差不多理解. 在这里说一点,缩点时,如果弧(u,v)的v点在一个环中,这个环形成的缩点在新图中的编号是k,那么新图中(u ...

  5. hdu 4009 Transfer water(最小树形图模板)

    题目链接:点击打开链接 Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Ja ...

  6. poj3164(最小树形图朱刘算法模板)

    题目链接:http://poj.org/problem?id=3164 题意:第一行为n, m,接下来n行为n个点的二维坐标, 再接下来m行每行输入两个数u, v,表点u到点v是单向可达的,求这个有向 ...

  7. 最小树形图-朱刘算法详解 +例题解析

    文章目录 最小树形图 定义 和最小生成树的区别 朱刘算法 思想 步骤 流程展示 算法实现 例题 POJ3164_Command_Network HDU2121_Ice_cream's_world_II ...

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

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

  9. NOI数据结构:最小树形图

    最小树形图-朱刘算法详解 +例题解析 最小树形图-朱刘算法详解 +例题解析_pursuit的博客-CSDN博客_最小树形图 图论 -- 生成树 -- 最小树形图 图论 -- 生成树 -- 最小树形图_ ...

最新文章

  1. Python,OpenCV进行直方图反投影
  2. Android APP全面屏适配技术要点
  3. Python从入门到精通 - 入门篇 (下)
  4. Oracle SQL Developer 的一个Bug
  5. 关于Android中XML解析方式
  6. 神经网络架构搜索(NAS)综述 | 附AutoML资料推荐
  7. 看风水用什么罗盘最好_兰花用什么花盆栽植最好?
  8. Matlab xlim ylim zlim函数
  9. 面试官问我:平常如何对你的 Java 程序进行调优?
  10. 揭牌!国字头高校正式落户南京!
  11. waitpid调用返回出错提示: No child processes问题
  12. Oracle NID工具修改数据库DBID和数据库名称
  13. HDU1106 排序(解法二)(废除!!!)
  14. MySQL外键约束_ON DELETE CASCADE/ON UPDATE CASCADE
  15. LAMP 3.1 mysql的root密码重置
  16. xenserver 虚拟机扩容lvm磁盘分区的方法_vm虚拟机中linux Centos7.4硬盘扩容
  17. 编码基本功:让测试人员报一个BUG,让其升级严重性,竟然束手无策
  18. calabash android教程,Calabash Android 使用教程 (二)
  19. linux lighttpd,linux下lighttpd服务器的详细安装步骤 以及对flv流媒体的支持配置
  20. 1000. 合并石头的最低成本

热门文章

  1. docker gitblit部署_2019_lcf
  2. Ehome:智能家居之多媒体系统mp3音频播放
  3. 老用户梦碎!微软:骁龙 820 不支持 x86 应用
  4. Assembly.LoadFrom函数报错“尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理...”
  5. 生产者-消费者问题详细分析【操作系统原理】
  6. 在商业化这件小事上,美拍们赶超Snap的机会在哪里?
  7. 计算机考证大学毕业还能考吗
  8. Java程序员进阶架构师必备学习文档:SSM+微服务+分布式+Nginx+MySQL
  9. IDEA 免费版申请!!!!学生一定要看啊!!这年头谁还破解???
  10. shell脚本 注意事项