poj 3164
朱刘算法
步骤:
1、计算出每个点边权最小的边的权(如果除根以外有其他的点没有入边,则不存在最小树形图),并记下边的另一个端点(称其为这个点的前趋)
2、沿着每个点向上走,如果在走到根或环上的点之前,就遇到走过的点,那么就出现环了。将环上的点标记一下当前环的编号,并将环上的所有边的边权加在答案里。
3、如果在2中没有找到环,将当前图除了根以外对应的点的最小入边边权加在答案里,然后返回答案。
4、否则,将剩下的点标号,并标记为非环点,将所有边两端的点的编号换成对应环的编号,如果目标点是一个环,将边权减少目标点对应的环中的最小入边权。
复杂度:最坏O(N^3)
#include <cstdio>
#include <cmath>
#include <vector>
#define oo 1e20
#define N 110
#define M 10100
using namespace std; struct Edge {
int u, v;
double w;
Edge(){}
Edge( int u, int v, double w ):u(u),v(v),w(w){}
}; int n, m;
double pts[N][];
int idx[N], vis[N], pre[N], inc[N];
double inw[N];
Edge edge[M]; double getdis( int u, int v ) {
int dx = pts[u][]-pts[v][];
int dy = pts[u][]-pts[v][];
return sqrt(dx*dx+dy*dy);
}
double diricted_mst( int root ) {
double rt = 0.0;
while() {
//---
for( int i=; i<=n; i++ )
inw[i] = oo;
for( int i=; i<m; i++ ) {
Edge &e = edge[i];
if( e.u==e.v ) continue;
if( inw[e.v]>e.w ) {
inw[e.v]=e.w;
pre[e.v]=e.u;
}
}
for( int i=; i<=n; i++ )
if( inw[i]==oo && i!=root )
return -1.0;
//---
for( int i=; i<=n; i++ )
vis[i] = idx[i] = ;
int cnt = ;
for( int u=,v,s; u<=n; u++ ) {
if( u==root ) continue;
for( v=pre[u]; v!=root && !idx[v] && vis[v]!=u; v=pre[v] )
vis[v] = u;
if( v==root || idx[v] ) continue;
cnt++;
s = v;
for( v=pre[s]; v!=s; v=pre[v] ) {
inc[v] = true;
idx[v] = cnt;
rt += inw[v];
}
inc[s] = true;
idx[s] = cnt;
rt += inw[s];
}
if( cnt== ) {
for( int u=; u<=n; u++ )
if( u!=root )
rt += inw[u];
break;
}
for( int u=; u<=n; u++ )
if( !idx[u] ) {
inc[u] = false;
idx[u]=++cnt;
}
//---
for( int i=; i<m; i++ ) {
Edge &e=edge[i];
if( inc[e.v] ) e.w-=inw[e.v];
e.u = idx[e.u];
e.v = idx[e.v];
}
root = idx[root];
n = cnt;
}
return rt;
}
int main() {
while(~scanf("%d%d",&n,&m)) {
for( int i=; i<=n; i++ )
scanf( "%lf%lf", &pts[i][], &pts[i][] );
for( int i=,u,v; i<m; i++ ) {
scanf( "%d%d", &u, &v );
edge[i] = Edge(u,v,getdis(u,v));
}
double ans = diricted_mst();
if( ans<0.0 ) printf( "poor snoopy\n" );
else printf( "%.2f\n", ans );
}
}
poj 3164的更多相关文章
- POJ 3164 Command Network (最小树形图)
[题目链接]http://poj.org/problem?id=3164 [解题思路]百度百科:最小树形图 ]里面有详细的解释,而Notonlysucess有精简的模板,下文有对其模板的一点解释,前提 ...
- poj 3164 Command Network
http://poj.org/problem?id=3164 第一次做最小树形图,看着别人的博客写,还没弄懂具体的什么意思. #include <cstdio> #include < ...
- POJ 3164 Command Network(最小树形图模板题+详解)
http://poj.org/problem?id=3164 题意: 求最小树形图. 思路: 套模板. 引用一下来自大神博客的讲解:http://www.cnblogs.com/acjiumeng/p ...
- poj 3164 Command Network(最小树形图模板)
Command Network http://poj.org/problem?id=3164 Time Limit: 1000MS Memory Limit: 131072K Total Subm ...
- poj 3164(最小树形图模板)
题目链接:http://poj.org/problem?id=3164 详细可以看这里:http://www.cnblogs.com/vongang/archive/2012/07/18/259685 ...
- poj 3164 Command Network (朱刘算法)
题目链接: http://poj.org/problem?id=3164 题目大意: 有n个点(用坐标表示)各点编号分别为1—>n,m条单向路,问能否存在一个花费价值最小的网络,能使从1点到达任 ...
- POJ 3164——Command Network——————【最小树形图、固定根】
Command Network Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 15080 Accepted: 4331 ...
- POJ 3164 Command Network 最小树形图模板
最小树形图求的是有向图的最小生成树,跟无向图求最小生成树有很大的区别. 步骤大致如下: 1.求除了根节点以外每个节点的最小入边,记录前驱 2.判断除了根节点,是否每个节点都有入边,如果存在没有入边的点 ...
- POJ 3164 Command Network 最小树形图
题目链接: 题目 Command Network Time Limit: 1000MS Memory Limit: 131072K 问题描述 After a long lasting war on w ...
- poj 3164 最小树形图
思路:就是裸的最小树形图~ #include<iostream> #include<cstdio> #include<cstring> #include<cm ...
随机推荐
- 【技巧总结】Penetration Test Engineer[5]-Operating System Security(SQL Server、MySQL提权)
4.数据库安全基础 4.1.MSSQL 数据库角色权限 sysadmin:执行SQL Server中的任何动作 db_owner:可以执行数据库中技术所有动作的用户 public:数据库的每个合法用户 ...
- http请求中的中文乱码问题
通过浏览器访问服务器页面和资源时,不可避免地要传送中文字串,如果客户机与服务器不能用同一码表解析字串,肯定会出现各种各样的乱码问题.我总结了几个乱码场景及解决办法,如下 1.服务器上的中文字串被客户端 ...
- spotlight on mysql--安装以及简介
Spotlight on MySQL 安装与配置 第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connecto ...
- JS、JQ实现焦点图轮播效果
JS实现焦点图轮播效果 效果图: 代码如下,复制即可使用: (不过里面的图片路径需要自己改成自己的图片路径,否则是没有图片显示的哦) <!DOCTYPE html> <html> ...
- HTML5 Differences from HTML4
Abstract "HTML5 Differences from HTML4" describes the differences of the HTML5 specificati ...
- Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...
- rocketmq在linux上安装
1.下载bin压缩包,然后解压 官网下载地址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.2/rocketmq-all-4.3.2- ...
- Decorator 装饰
意图 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 结构 Component:定义一个对象接口,可以给这些对象动态地添加职责:(纯虚函数) Conc ...
- windows7无声音,提示未插入扬声器或耳机的解决
windows7无声音,提示未插入扬声器或耳机的解决: http://jingyan.baidu.com/article/358570f6043a85ce4624fc47.html
- 2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest B - Byteland Trip dp
B - Byteland Trip 题目大意:给你一个由'<' 和 '>'组成的串, 如果在'<' 只能前往编号比它小的任意点, 反之只能前往比它大的任意点,问你能遍历所有点 并且每 ...