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有精简的模板,下文有对其模板的一点解释,前提 ...
随机推荐
- Android屏幕设置只允许上下旋转
android:screenOrientation = ["unspecified" | "behind" | ...
- arrow function and bind
Can you bind arrow functions? https://stackoverflow.com/questions/33308121/can-you-bind-arrow-functi ...
- jdbcTemplate批量插入处理数据
最近有个需求,就是批量处理数据,但是并发量应该很大,当时第一时间想到得是mybatis的foreach去处理,但是后来通过查资料发现,相对有spring 的jdbcTemplate处理速度,mybat ...
- PHP数组函数详解大全
一.数组操作的基本函数 数组的键名和值 array_values($arr);获得数组的值 array_keys($arr);获得数组的键名 array_flip($arr);数组中的值与键名互换(如 ...
- hdu5965扫雷 枚举+递推
题目链接 思路:枚举第一列的可能种数,然后递推即可,中途判断是否满足条件,最后再判断最后一列是否满足条件即可. #include<bits/stdc++.h> #define LL lon ...
- Mail.Ru Cup 2018 Round 3 B. Divide Candies
题目链接 分析一下题意可以得到题目要求的是满足下面这个 公式的不同的i,ji,ji,j的方案数; 即(i2+j2)mod   m=0 (n ≤ ...
- 设置下载文件路径 & 获取接口结尾名称。
// 获取下载位置 private String isExistDir(String saveDir) throws IOException { File downloadFile = new Fil ...
- 剑指Offer-翻转单词顺序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"st ...
- CentOS7离线安装mysql5.7
下载mysql5.7,系统选择redhat,版本选择RHEL7,下载RPM Bundle后得到一个tar文件.这里得到文件mysql-5.7.25-1.el7.x86_64.rpm-bundle.ta ...
- windows环境下curl 安装和使用
原文:https://blog.csdn.net/qq_21126979/article/details/78690960?locationNum=10&fps=1 一.curl 安装 cur ...