对最小树形图做个小小的总结:

1:清除自环,自环是不可能存在于任何最小树形图中的;
2:求出每个顶点的的最小入边;
3:判断该图是否存在最小树形图,由 1 可以判定,或者以图中顶点v作为根节点遍历该图就能判    断是否存在最小树形图;
4:找环,之后建立新图,缩点后重新标记。

题意:说部队之间通过电缆传达信息,但是传达方向是单向的,前n行中给出部队坐标位置,后m行给出可以连接的部队,问最少需要多长的电缆。
思路:采用最小树形图算法

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iomanip>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1005;
struct node{double x,y;
}num[maxn];
struct V{int u,v;double w;
}ver[maxn*maxn];
double Dist(node a,node b){double x=a.x-b.x;double y=a.y-b.y;return sqrt(x*x+y*y);
}
double in[maxn];//记录最小边权
int pre[maxn];//记录前驱节点
int vis[maxn];//标记圈的情况
int id[maxn];//记录圈的个数
int n,m;//输入
int pos;//记录根节点
double Drector_MST(int n,int m,int root){double ans=0;while(true){for(int i=0;i<n;i++){//初始化最小边权in[i]=inf;}for(int i=0;i<m;i++){int u=ver[i].u;int v=ver[i].v;if(u!=v&&ver[i].w<in[v]){//当最小边权可以更新时in[v]=ver[i].w;//记录最小边权pre[v]=u;//记录最小边权的前驱节点}if(root==u){pos=i;}}for(int i=0;i<n;i++){if(root!=i&&in[i]==inf){//判断是否可以构成最小树形图return -1;}}int cnt=0;//记录圈数memset(vis,-1,sizeof(vis));memset(id,-1,sizeof(id));in[root]=0;for(int i=0;i<n;i++){ans+=in[i];int v=i;while(root!=v&&vis[v]!=i&&id[v]==-1){//记录以i我缩点的圈vis[v]=i;v=pre[v];}if(root!=v&&id[v]==-1){for(int u=pre[v];u!=v;u=pre[u]){id[u]=cnt;}id[v]=cnt++;}}if(cnt==0)break;//当圈数为零的时候,表示得到最小树形图,breakfor(int i=0;i<n;i++){//表示将剩下的是以一个点作为圈if(id[i]==-1){id[i]=cnt++;}}for(int i=0;i<m;i++){int u=ver[i].u;int v=ver[i].v;ver[i].u=id[u];ver[i].v=id[v];if(id[u]!=id[v]){//表示不在同一个圈中ver[i].w-=in[v];}}n=cnt;root=id[root];}return ans;
}
int main(){while(scanf("%d %d",&n,&m)!=EOF){for(int i=0;i<n;i++){scanf("%lf %lf",&num[i].x,&num[i].y);}for(int i=0;i<m;i++){scanf("%d %d",&ver[i].u,&ver[i].v);ver[i].u--;ver[i].v--;if(ver[i].u!=ver[i].v){ver[i].w=Dist(num[ver[i].u],num[ver[i].v]);}else{ver[i].w=inf;}}double ans=Drector_MST(n,m,0);if(ans==-1){cout<<"poor snoopy"<<endl;}else{cout<<setiosflags(ios::fixed)<<setprecision(2)<<ans<<endl;}}return 0;
}

poj3164(最小树形图模版)相关推荐

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

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

  2. POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法

    Command Network Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 12833   Accepted: 3717 ...

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

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

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

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

  5. 【POJ3164】Command Network 最小树形图模板题 重修版

    链接: #include <stdio.h> int main() {puts("转载请注明出处[vmurder]谢谢");puts("网址:blog.csd ...

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

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

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

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

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

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

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

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

最新文章

  1. ssh中exit命令退出远程服务器_解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止...
  2. html5 canvas 版 hello world! 暨haXe简介
  3. 计算机不能显示可移动磁盘咋办,U盘插上电脑不显示“可移动磁盘”该怎么办...
  4. 十、封装python3读写ini文件类
  5. 查询HTML标签select中options的值并定位其位置
  6. vuforia for unity 注意事项
  7. 全国30m土壤质地数据、土壤类型数据、土壤PH、有机质、土壤理化性质数据获取/土壤侵蚀数据/土地利用数据/NPP数据/径流量数据/太阳辐射数据/降雨量数据
  8. Linux 安装NDK
  9. js的爬山之路原型与原型链~~狂徒李四
  10. 超火爆的人类一败涂地Human Fall Flat Mac中文版(支持m1)
  11. 朋友圈集赞,简洁壁纸,玩游戏学git
  12. C++ 泛型编程(五) 模版重载与特例化
  13. 基于卷积神经网络的猫狗识别系统的设计与实现
  14. 【升级华为网络设备及失败修复】
  15. 参加2020全国大学生数学建模竞赛有感
  16. python是一种语言吗-python语言是非开源语言吗
  17. springboot集成netty实现代理服务器
  18. 我在美团Android研发岗工作的那5年,社招面试心得
  19. 2022-2028全球与中国荧光增白剂 OB-1市场现状及未来发展趋势
  20. EZDML3.31发布 支持从数据库获取测试数据

热门文章

  1. 一个小改动,CNN输入固定尺寸图像改为任意尺寸图像
  2. 不用3D建模软件,如何用数学公式创造一个女孩?会眨眼,有光影的那种
  3. spark-shuffle分析
  4. 机器学习中的欠拟合与过拟合
  5. 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示
  6. dedeCMS修改文章更新发布时间问题
  7. mysql 查询某个日期时间段,每天同一时间段的数据
  8. nodeJs-autoMerge
  9. 前后台使用ajax传list的时候,用value[] 获取值
  10. git reset到之前的某一个commit或者恢复之前删除的某一个分支