博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ - 3164 Command Network(朱刘算法)
阅读量:6679 次
发布时间:2019-06-25

本文共 2668 字,大约阅读时间需要 8 分钟。

题目大意:有N个点,M条有向边。

如今要求你以1为根。构造出一棵最小生成树,问这棵最小生成树是否能被构造出来,假设能够。总权值是多少

解题思路:朱刘算法的裸题。我仅仅想吐槽一下POJ,用的是double型的,输出时是%.2lf,结果是WA

换成了%.2f就A了。

。这什么情况,白白花费了1个多小时去调错。。

#include 
#include
#include
using namespace std;#define N 110#define M 10010#define esp 1e-5const double INF = 1e9;struct Node { int x, y;}node[N];struct Edge{ int from, to; double dis;}E[M];int n, m, tot;int pre[N], id[N], vis[N];double in[N];double distance(int u, int v) { int x = node[u].x - node[v].x; int y = node[u].y - node[v].y; return sqrt(1.0 * x * x + 1.0 * y * y);}void AddEdge(int u, int v) { E[tot].from = u; E[tot].to = v; E[tot].dis = distance(u, v); tot++;}void init() { for (int i = 0; i < n; i++) scanf("%d%d", &node[i].x, &node[i].y); tot = 0; int u, v; for (int i = 0; i < m; i++) { scanf("%d%d", &u, &v); u--; v--; AddEdge(u, v); }}double ans;bool Directed_MST(int root) { ans = 0; int u, v, tmp; while (1) { for (int i = 0; i < n; i++) in[i] = INF; for (int i = 0; i < m; i++) { u = E[i].from; v = E[i].to; if (u != v && E[i].dis - in[v] < esp) { in[v] = E[i].dis; pre[v] = u; } } for (int i = 0; i < n; i++) { if (i == root) continue; if (in[i] == INF) return false; } int subnode = 0; memset(vis, -1, sizeof(vis)); memset(id, -1, sizeof(id)); in[root] = 0; for (int i = 0; i < n; i++) { ans += in[i]; tmp = i; while (vis[tmp] != i && id[tmp] == -1 && tmp != root) { vis[tmp] = i; tmp = pre[tmp]; } if (tmp != root && id[tmp] == -1) { u = pre[tmp]; while (u != tmp) { id[u] = subnode; u = pre[u]; } id[tmp] = subnode++; } } if (subnode == 0) return true; for (int i = 0; i < n; i++) if (id[i] == -1) id[i] = subnode++; for (int i = 0; i < m; i++) { tmp = E[i].to; E[i].from = id[E[i].from]; E[i].to = id[E[i].to]; if (E[i].from != E[i].to) E[i].dis -= in[tmp]; } root = id[root]; n = subnode; }}void solve() { if (!Directed_MST(0)) { printf("poor snoopy\n"); } else printf("%.2f\n", ans);}int main() { while (~scanf("%d%d", &n, &m)) { init(); solve(); } return 0;}

转载地址:http://rtnao.baihongyu.com/

你可能感兴趣的文章
程序员找不女朋友的原因
查看>>
[摘录]第3章 终局谈判策略
查看>>
react-router中的路由钩子使用
查看>>
C#编程之“串口通讯多次接收”
查看>>
【python 文件操作】python 文件操作
查看>>
线程相关
查看>>
linux下svn服务器配置问题
查看>>
《自我介绍》
查看>>
【C语言】20-static和extern关键字2-对变量的作用
查看>>
使用mpvue开发github小程序总结
查看>>
用表格给表单定位
查看>>
Redis
查看>>
Intent-filter的介绍
查看>>
开博说明
查看>>
Scala方法定义,方法和函数的区别,将方法转换成函数
查看>>
Hbase 读写 原理
查看>>
详解JDBC驱动的四种类型
查看>>
第十一次作业
查看>>
关于Android 2.2设置短信本机号码和头像的解决办法
查看>>
JZ-C-47
查看>>