POJ3436 Command Network [最小树形图]
POJ3436 Command Network
最小树形图裸题
傻逼poj回我青春
wa wa wa 的原因竟然是需要%.2f而不是.2lf
我还有英语作业音乐作业写不完了啊啊啊啊啊啊啊啊啊
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#define fir first
#define sec second
using namespace std;
const int N = 1005, M = 1e6+5, inf = 1e9+7;
int n, m, x[N], y[N];
struct edge {
int u, v;
double w;
} e[M];
inline double dis(int u, int v) {
return sqrt((x[u]-x[v])*(x[u]-x[v]) + (y[u]-y[v])*(y[u]-y[v]));
}
pair<double, int> fa[N];
int vis[N], id[N];
double zhu_liu(int root = 1) {
double ans = 0;
while(true) {
for(int i=1; i<=n; i++) fa[i] = make_pair(inf, 0);
for(int i=1; i<=m; i++) {
int u = e[i].u, v = e[i].v;
fa[v] = min(fa[v], make_pair(e[i].w, u));
}
for(int i=1; i<=n; i++) if(i != root && !fa[i].sec) {
return -1;
}
fa[root] = make_pair(0, 0);
memset(vis, 0, sizeof(vis));
memset(id, 0, sizeof(id));
int num = 0;
for(int i=1; i<=n; i++) if(i != root) {
ans += fa[i].fir;
int u = i;
while(u != root && !vis[u]) vis[u] = i, u = fa[u].sec;
if(u != root && vis[u] == i) {
num++;
while(id[u] != num) id[u] = num, u = fa[u].sec;
}
}
if(!num) break;
for(int i=1; i<=n; i++) if(!id[i]) id[i] = ++num;
int cnt = 0;
for(int i=1; i<=m; i++) {
int u = e[i].u, v = e[i].v;
double tmp = fa[v].fir;
u = id[u];
v = id[v];
if(u == v) continue;
e[++cnt] = (edge) {u, v, e[i].w - tmp};
}
n = num;
m = cnt;
root = id[root];
}
return ans;
}
int main() {
//ios::sync_with_stdio(false); cin.tie(); cout.tie();
while(cin >> n >> m) {
for(int i=1; i<=n; i++) scanf("%d %d", &x[i], &y[i]);
int cnt = 0;
for(int i=1; i<=m; i++) {
int u, v;
scanf("%d %d", &u, &v);
if(u == v) continue;
e[++cnt] = (edge) {u, v, dis(u, v)};
}
m = cnt;
double ans = zhu_liu();
if(ans == -1) puts("poor snoopy");
else printf("%.2f\n", ans);
}
}
POJ3436 Command Network [最小树形图]的更多相关文章
- POJ 3164 Command Network 最小树形图
题目链接: 题目 Command Network Time Limit: 1000MS Memory Limit: 131072K 问题描述 After a long lasting war on w ...
- POJ3164 Command Network —— 最小树形图
题目链接:https://vjudge.net/problem/POJ-3164 Command Network Time Limit: 1000MS Memory Limit: 131072K ...
- POJ3164 Command Network(最小树形图)
图论填个小坑.以前就一直在想,无向图有最小生成树,那么有向图是不是也有最小生成树呢,想不到还真的有,叫做最小树形图,网上的介绍有很多,感觉下面这个博客介绍的靠谱点: http://www.cnblog ...
- POJ 3164 Command Network 最小树形图模板
最小树形图求的是有向图的最小生成树,跟无向图求最小生成树有很大的区别. 步骤大致如下: 1.求除了根节点以外每个节点的最小入边,记录前驱 2.判断除了根节点,是否每个节点都有入边,如果存在没有入边的点 ...
- POJ 3164 Command Network 最小树形图 朱刘算法
=============== 分割线之下摘自Sasuke_SCUT的blog============= 最 小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T, ...
- POJ - 3164-Command Network 最小树形图——朱刘算法
POJ - 3164 题意: 一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 题目就是求这个最小的树形图. 参考资料:https://blog.csdn.net/ ...
- POJ 3164 Command Network ( 最小树形图 朱刘算法)
题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...
- POJ 3164——Command Network——————【最小树形图、固定根】
Command Network Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 15080 Accepted: 4331 ...
- POJ 3164 Command Network (最小树形图)
[题目链接]http://poj.org/problem?id=3164 [解题思路]百度百科:最小树形图 ]里面有详细的解释,而Notonlysucess有精简的模板,下文有对其模板的一点解释,前提 ...
随机推荐
- 试用VS2019正式版
1.下载地址https://visualstudio.microsoft.com/zh-hans/downloads/2.安装,安装过程比较简单,直接下一步,下一步即可,现在的网速一般下载+安装要2个 ...
- arrow function and bind
Can you bind arrow functions? https://stackoverflow.com/questions/33308121/can-you-bind-arrow-functi ...
- kail linux虚拟机安装tools工具
因为自己比较懒,有时候自己不想打字需要粘贴就安装了虚拟机tools工具,又因为自己脑子不好使所以就写一下步骤,以便以后用得着.我这里用得是kail linux系统,不知道contest能不能这样安,下 ...
- fatal error: Eigen3/Core: 没有那个文件或目录
解决方法: 在CMakeLists.txt文件里添加: include_directories("/usr/include/eigen3")
- jenkins启动
1.已安装JDK,因为jenkins是一款基于java的持续集成工具 2.已配置tomcat,并安装maven 3.下载一个jenkins的war包,放在tomcat/webapps目录下 4.cmd ...
- Linux initramfs说明
1.前言 最近在尝试对手头的开发板进行移植,此处记录initramfs挂载的基本流程,记录一下,以备后查.分析时是基于linux3.4.2 2. rootfs的挂载 start_kernel-> ...
- 【Python】Flask中@wraps的使用
先说总结,白话来讲,@wraps相当于是装饰器的装饰器. python内置的方法使用解释,看起很复杂的样子┓( ´∀` )┏ def wraps(wrapped, assigned = WRAPPER ...
- struts 学习03
jdk下载: 使用注解: @ParenPackage(value="struts-default") @Namespace(value="/) @Action(value ...
- JDBC编程六部曲
今天初学jdbc,明白了大致的编程流程,在此总结一下: JDBC编程可以分为六步——六部曲: * 第一步:注册驱动. * 1.1 获取驱动对象 * 1.2 注册驱动 * 第二步:获取数据库连接 * 第 ...
- spring-cloud-hystrix-dasboard服务调用监控
除了隔离依赖服务的调用以外,hystrix还提供了准实时的调用监控(hystrix dashboard),hystrxi会持续的记录所有通过hyxtrix发起的请求的执行信息,并以统计报表和图形的形式 ...