poj 3164 Command Network(最小树形图模板)
| Time Limit: 1000MS | Memory Limit: 131072K | |
| Total Submissions: 18769 | Accepted: 5392 |
Description
After a long lasting war on words, a war on arms finally breaks out between littleken’s and KnuthOcean’s kingdoms. A sudden and violent assault by KnuthOcean’s force has rendered a total failure of littleken’s command network. A provisional network must be built immediately. littleken orders snoopy to take charge of the project.
With the situation studied to every detail, snoopy believes that the most urgent point is to enable littenken’s commands to reach every disconnected node in the destroyed network and decides on a plan to build a unidirectional communication network. The nodes are distributed on a plane. If littleken’s commands are to be able to be delivered directly from a node A to another node B, a wire will have to be built along the straight line segment connecting the two nodes. Since it’s in wartime, not between all pairs of nodes can wires be built. snoopy wants the plan to require the shortest total length of wires so that the construction can be done very soon.
Input
The input contains several test cases. Each test case starts with a line containing two integer N (N ≤ 100), the number of nodes in the destroyed network, and M (M ≤ 104), the number of pairs of nodes between which a wire can be built. The next N lines each contain an ordered pair xi and yi, giving the Cartesian coordinates of the nodes. Then follow M lines each containing two integers i and j between 1 and N (inclusive) meaning a wire can be built between node i and node j for unidirectional command delivery from the former to the latter. littleken’s headquarter is always located at node 1. Process to end of file.
Output
For each test case, output exactly one line containing the shortest total length of wires to two digits past the decimal point. In the cases that such a network does not exist, just output ‘poor snoopy’.
Sample Input
4 6
0 6
4 6
0 0
7 20
1 2
1 3
2 3
3 4
3 1
3 2
4 3
0 0
1 0
0 1
1 2
1 3
4 1
2 3
Sample Output
31.19
poor snoopy
Source
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 101
#define M 10001
#define inf 2e9
double x[N],y[N];
double in[N];
int n,m;
int pre[N],vis[N],col[N];
struct node
{
int u,v;
double dis;
}e[M];
double point_dis(int a,int b)
{
return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
}
double directed_MST()
{
int tot=n,root=,cirnum,to;
double ans=;
while()
{
for(int i=;i<=tot;i++) in[i]=inf;
for(int i=;i<=m;i++)
if(e[i].dis<in[e[i].v] && e[i].u!=e[i].v)
{
pre[e[i].v]=e[i].u;
in[e[i].v]=e[i].dis;
}
for(int i=;i<=tot;i++)
if(i!=root && in[i]==inf) return -;
cirnum=;
memset(vis,,sizeof(vis));
memset(col,,sizeof(col));
in[root]=;
for(int i=;i<=tot;i++)
{
ans+=in[i];
to=i;
while(vis[to]!=i && !col[to] && to!=root)
{
vis[to]=i;
to=pre[to];
}
if(to!=root && !col[to])
{
cirnum++;
for(int u=pre[to];u!=to;u=pre[u])
col[u]=cirnum;
col[to]=cirnum;
}
}
if(!cirnum) break;
for(int i=;i<=tot;i++)
if(!col[i]) col[i]=++cirnum;
for(int i=;i<=m;i++)
{
to=e[i].v;
e[i].u=col[e[i].u];
e[i].v=col[e[i].v];
if(e[i].u!=e[i].v) e[i].dis-=in[to];
}
tot=cirnum;
root=col[root];
}
return ans;
}
int main()
{
int u,v,tot;
double ans;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);
tot=;
while(m--)
{
scanf("%d%d",&u,&v);
if(u!=v)
{
e[++tot].u=u;
e[tot].v=v;
e[tot].dis=point_dis(u,v);
}
}
m=tot;
ans=directed_MST();
if(ans==-) printf("poor snoopy\n");
else printf("%.2lf\n",ans);
}
}
poj 3164 Command Network(最小树形图模板)的更多相关文章
- 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 Command Network 最小树形图 朱刘算法
=============== 分割线之下摘自Sasuke_SCUT的blog============= 最 小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T, ...
- POJ3436 Command Network [最小树形图]
POJ3436 Command Network 最小树形图裸题 傻逼poj回我青春 wa wa wa 的原因竟然是需要%.2f而不是.2lf 我还有英语作业音乐作业写不完了啊啊啊啊啊啊啊啊啊 #inc ...
- 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 (最小树形图)
[题目链接]http://poj.org/problem?id=3164 [解题思路]百度百科:最小树形图 ]里面有详细的解释,而Notonlysucess有精简的模板,下文有对其模板的一点解释,前提 ...
- POJ 3164——Command Network——————【最小树形图、固定根】
Command Network Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 15080 Accepted: 4331 ...
- POJ 3164 Command Network ( 最小树形图 朱刘算法)
题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...
随机推荐
- Dijkstra+优先队列 模板
#include<bits/stdc++.h> using namespace std; #define ll long long ; const ll inf=1e17; struct ...
- LAMP 系统服务搭建过程详解
LAMP 架构在企业里用得非常广泛,目前很多电商公司.游戏公司.移动互联网公司大多都采用这种架构.LAMP指的是Linux.Apache.MySQL.PHP.下面记录了 LAMP 架构系统服务的搭建过 ...
- 爬虫学习之-Python list 和 str 互转
一.list转字符串 命令:''.join(list)其中,引号中是字符之间的分割符,如“,”,“;”,“\t”等等如:list = [1, 2, 3, 4, 5]''.join(list) 结果 ...
- [Oracle收费标准]
http://www.oracle.com/us/corporate/pricing/technology-price-list-070617.pdf 1: 数据库 2. 中间件 3. weblogi ...
- laya3d 文件格式
先认识下laya3d的一些文件 导出文件说明: ls --- 场景文件: Json文件,包含场景中所有节点的数据信息,包含光照贴图信息 ...
- 【转】Base64算法详解
原文链接:https://blog.csdn.net/robertcpp/article/details/51628647 完整的BASE64定义可见RFC 1421和RFC 2045.编码后的数据比 ...
- 第77天:jQuery事件绑定触发
一.元素操作 1. 高度和宽度 $(“div”).height(); // 高度 $(“div”).width(); // 宽度 .height()方法和.css(“height”)的区别: 返回值不 ...
- angular 数据内容有重复时不显示问题
<body ng-app="app"> <div ng-controller="myctl"> <ul> <li ng ...
- document.readyState的使用
document.readyState:判断文档是否加载完成.firefox不支持. 这个属性是只读的,传回值有以下的可能: 0-UNINITIALIZED:XML 对象被产生,但没有任何文件被加载. ...
- 【数据库_Mysql】JAVA-数据库Date格式在前台JSP页面的获取
问题: 数据库保存的为date格式的日期 在前台JSP页面显示的为一串数字1487897 解决办法: 数据库表中字段对应的实体对象属性的get方法上添加一行代码 页面即可正常显示