/*

思路很简单,也不知道哪里错了TAT

*/

/*
N个点通过笛卡尔坐标表示
根节点是1,求最小树形图
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define MAXN 105
#define INF 0x3f3f3f3f
using namespace std;
struct Edge{
int u,v;
double cost;
Edge(int uu=,int vv=,double cc=0.0):u(uu),v(vv),cost(cc){}
}edge[MAXN*MAXN];
struct node{
int x,y;
}nodes[MAXN];
double dist(int u,int v){
return sqrt((double)(nodes[u].x-nodes[v].x)*(nodes[u].x-nodes[v].x)+
(nodes[u].y-nodes[v].y)*(nodes[u].y-nodes[v].y));
}
int pre[MAXN],id[MAXN],vis[MAXN];
double in[MAXN];
double zhuliu(int root, int nv, int ne)
{
double ans = ;
int u, v, i, cnt;
while(true){
//0.初始化
for(i = ; i <= nv; ++i) in[i] = INF;
//1.找最小入边集
for(i = ; i <= ne; ++i){
u = edge[i].u; v = edge[i].v;
if(edge[i].cost < in[v] && u != v){
in[v] = edge[i].cost; pre[v] = u;
}
}
for(i = ; i <= nv; ++i)
if(in[i]==INF && i!=root)
return -;
//2.找非根无入边点(略),因为必定有解
//3.找环,加权,重新标号
memset(id, -, sizeof(id));
memset(vis, -, sizeof(vis));
cnt = in[root] = ;
for(i = ; i <= nv; ++i){
ans += in[i]; v = i;
while(vis[v] != i && v != root && id[v] == -){
vis[v] = i; v = pre[v];
}
if(v != root && id[v] == -){
for(u = pre[v]; u != v; u = pre[u])
id[u] = cnt;
id[v] = cnt++;
}
}
if(cnt == ) break; //无环,算法完成
for(i = ; i <= nv; ++i)
if(id[i] == -) id[i] = cnt++;
//4.缩点,遍历每一条边,重新构图
for(i = ; i <= ne; ++i){
v = edge[i].v;
edge[i].u = id[edge[i].u];
edge[i].v = id[edge[i].v];
if(edge[i].u != edge[i].v) edge[i].cost -= in[v];
}
//顶点数减少
nv = cnt; root = id[root];
}
return ans;
}
int main(){
int n,m,u,v;
while(scanf("%d%d",&n,&m)==){
for(int i=;i<=n;i++)
scanf("%d%d",&nodes[i].x,&nodes[i].y);
int totm=;
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
if(u!=v)
edge[++totm]=Edge(u,v,dist(u,v));
}
int root=;
double res=zhuliu(root,n,totm);
if(res==-)
puts("poor snoopy");
else
printf("%.2lf\n",res);
}
return ;
}

poj3164 最小树形图板子题的更多相关文章

  1. hdu4009最小树形图板子题

    /*调了一下午的最小树形图,昨天刚刚看懂模板..最小树形图,就是有向图的最小生成树,很神奇==*/ #include<iostream> #include<cstring> # ...

  2. poj3164最小树形图模板题

    题目大意:给定一个有向图,根节点已知,求该有向图的最小树形图.最小树形图即有向图的最小生成树,定义为:选择一些边,使得根节点能够到达图中所有的节点,并使得选出的边的边权和最小. 题目算法:朱-刘算法( ...

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

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

  4. 最小割板子题——[USACO5.4]奶牛的电信

    今天邱神给我们讲了图论,还讲了一下网络流算法.自己找了一个洛谷板子题. 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果 ...

  5. POJ 3164 Command Network(最小树形图模板题+详解)

    http://poj.org/problem?id=3164 题意: 求最小树形图. 思路: 套模板. 引用一下来自大神博客的讲解:http://www.cnblogs.com/acjiumeng/p ...

  6. hdu 4009 最小树形图模板题朱刘算法

    #include<stdio.h> /*思路:显然对于每个地方, 只有一种供水方式就足够了,这样也能保证花费最小, 而每个地方都可以自己挖井,所以是不可能出现无解的情况的, 为了方便思考, ...

  7. uva11183 最小树形图模板题

    很简单的模板题,不多说了 #include<iostream> #include<cstring> #include<cstdio> #define INF 0x3 ...

  8. 【刷题】洛谷 P4716 【模板】最小树形图

    题目背景 这是一道模板题. 题目描述 给定包含 \(n\) 个结点, \(m\) 条有向边的一个图.试求一棵以结点 \(r\) 为根的最小树形图,并输出最小树形图每条边的权值之和,如果没有以 \(r\ ...

  9. bzoj4349: 最小树形图

    最小树形图模板题…… 这种\(O(nm)\)的东西真的能考到么…… #include <bits/stdc++.h> #define N 60 #define INF 1000000000 ...

随机推荐

  1. Python 16 html 基础 jQuery & Javascript研究

    基础内容 DOM操作 javascript探讨 JQuery初识 DOM innerText  ==>获取仅文本 innerHtml  ==>获取全部内容 <div id=" ...

  2. Python基础1(2017-07-16)

    先墨守常规写一个简单的hello world!这是所有语言学习的第一点. Python Hello world name="hello world!" print(name) 如上 ...

  3. redis-deskmanager 连不上 虚拟机 - centos redis

    1.没设置redis密码 : https://blog.csdn.net/HUXU981598436/article/details/54668779 2.关闭防火墙

  4. Pftriage:分析和追踪恶意文件,识别特征

    项目地址 PFTriage:https://github.com/idiom/pftriage 参考 Pftriage:如何在恶意软件传播过程中对恶意文件进行分析 https://www.freebu ...

  5. Python3-初识面向对象

    知识点: 面向过程VS面向对象 初识类和对象 对象之间的交互 类与对象之间的命名空间 面向对象的组合用法 面向对象的三大特性(封装.继承.多态) 继承 抽象类和接口类 多态 封装  -- (prope ...

  6. Zynq-Linux移植学习笔记之27UIO机制响应外部中断实现【转】

    转自:https://blog.csdn.net/zhaoxinfan/article/details/80285150 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  7. linux系统设置静态IP,DHCP网络服务,DNS

    一.设置静态IP及DHCP网络服务 kk@yuanqiangfei:~$ cat /etc/network/interfaces # This file describes the network i ...

  8. 题解-POI2009 WSP-Island

    Problem bzoj1137 题意概要:给定一个凸多边形坐标.点按顺时针编号 \(1\) 到 \(n\).任意两点之间都有一条长度为欧氏距离的边相连.边相交处可以自由穿行.有 \(m\) 条边不能 ...

  9. 初次认识dedecms和帝国cms内容管理系统

    近乎完美的内容模块管理 强大的内容管理系统,细致入微 其原理都是 先建立一个 模板系统 然后动态生成静态页面 注意各个板块和栏目的设置  在迁移网站的时候 尤其需要注意的是 系统参数的 根目录 需要及 ...

  10. mysql查询sending data占用大量时间的问题处理

    问题描述:某条sql语句在测试环境执行只需要1秒不到,到了生产环境执行需要8秒以上 在phpmyadmin里面执行性能分析,发现sending data占用了差不多90%以上的时间 查询一下“Send ...