MPI Maelstrom POJ - 1502

实验室有很多台计算机,由于每个人计算机的性能不同,导致计算机之间发送信息的速度不同,所以花费时间不同。

消息从第一台电脑发送到第二台电脑后,这两台电脑能再向其他电脑发送消息,就是一种类似二叉树的结构。

当然并不是真正的二叉树——我们的计算机有一些特殊的特性,我们应该加以利用。

我们的计算机允许同时向连接到它的任意数量的其他计算机发送消息。

然而,消息不一定同时到达目的地——这涉及到计算机配置。

一般来说,我们需要考虑到拓扑结构中每个计算机的时间成本,并相应地计划将消息传播所需的总时间降到最低。

涂爷需要经常给其他人发消息,她想要知道如果她发出一个消息,至少要等多久全部的人才可以都收到通知。

Input

第一行输入一个n,表示有多少台计算机(涂爷当然是一号机啦~)。

随后n-1行,以邻接矩阵的形式给出计算机(1~n)之间通讯需要的时间。

由于两台计算机相互通信时间相等,且计算机自己和自己不需要通信,所以只给出了矩阵的下三角。

ps:x表示由于部分计算机之间存在特殊的磁场并不能通信。

ps2:该题所有数据范围0~100。

Output

输出一行表示涂爷需要等待的时间。.

Examples

Sample Input

5
50
30 5
100 20 50
10 x x 10
Sample Output
35

数据只有100,所以便利使用Floyd也是可以的

Floyd

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
using namespace std; const int maxn = 110;
const int inf = 0x3f3f3f3f;
int e[maxn][maxn];
int n; void floyd() {
for (int k = 1; k <= n; ++k)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
if (e[i][j] > e[i][k] + e[k][j])
e[i][j] = e[i][k] + e[k][j];
} int main() {
//freopen("in.txt","r",stdin);
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> n; char c[20];
for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)e[i][j] = inf;
for (int i = 1; i <= n; ++i)e[i][i] = 0;
for(int i = 2;i<=n;++i)
for (int j = 1; j <= i - 1; ++j) {
cin >> c;
if (c[0] == 'x')continue;
e[i][j] = e[j][i] = atoi(c);
}
floyd();
int ans = 0;
for (int i = 2; i <= n; i++) {
if (e[1][i] != inf)
ans = max(ans, e[1][i]);
}
cout << ans << endl;
}

堆优化的Dijkstra

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
typedef pair<int, int> PII;
const int inf = 0x3f3f3f3f;
const int maxn = 110;
int w[maxn][maxn];
int dis[maxn];
bool book[maxn];
int n; void Dijkstra() {
priority_queue<PII, vector<PII>, greater<PII> > q;
memset(book, false, sizeof book);
for (int i = 2; i <= n; ++i)dis[i] = inf;
dis[1] = 0; book[0] = true;
q.push({ 0,1 });
while (q.size()) {
PII cur = q.top(); q.pop();
int u = cur.second;
if (book[u])continue;
book[u] = true;
for (int v = 1; v <= n; ++v) {
if (dis[u] + w[u][v] < dis[v]) {
dis[v] = dis[u] + w[u][v];
q.push({ dis[v], v });
}
}
}
} int Stoi(string s) {
int ret = 0;
for (int i = s.length() - 1, j = 1; i >= 0; --i, j *= 10)
ret += (s[i] - '0') * j;
return ret;
} int main() {
string input;
fill(w[0], w[0] + maxn * maxn, inf);
cin >> n;
for (int i = 2; i <= n; ++i)
for (int j = 1; j < i; ++j) {
cin >> input;
if (input != "x") w[i][j] = w[j][i] = Stoi(input);
}
Dijkstra();
int ans = 0;
for (int i = 2; i <= n; ++i)
ans = max(ans, dis[i]);
cout << ans << endl;
return 0;
}

MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】的更多相关文章

  1. kuangbin专题专题四 MPI Maelstrom POJ - 1502

    题目链接:https://vjudge.net/problem/POJ-1502 dijkstra板子题,题目提供下三角情况,不包含正对角线,因为有题意都为0,处理好输入,就是一个很水的题. #inc ...

  2. MPI Maelstrom POJ - 1502 floyd

    #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> usin ...

  3. POJ 1502 MPI Maelstrom [最短路 Dijkstra]

    传送门 MPI Maelstrom Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5711   Accepted: 3552 ...

  4. POJ 1502 MPI Maelstrom( Spfa, Floyd, Dijkstra)

    题目大意: 给你 1到n ,  n个计算机进行数据传输, 问从1为起点传输到所有点的最短时间是多少, 其实就是算 1 到所有点的时间中最长的那个点. 然后是数据 给你一个n 代表有n个点, 然后给你一 ...

  5. POJ 2387 Til the Cows Come Home(dijkstra裸题)

    题目链接:http://poj.org/problem?id=2387 题目大意:给你t条边(无向图),n个顶点,让你求点1到点n的最短距离. 解题思路:裸的dijsktra,注意判重边. 代码: # ...

  6. hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题

    hdu 2544  求点1到点n的最短路  无向图 Sample Input2 1 //结点数 边数1 2 3 //u v w3 31 2 52 3 53 1 20 0 Sample Output32 ...

  7. POJ 1330 LCA裸题~

    POJ 1330 Description A rooted tree is a well-known data structure in computer science and engineerin ...

  8. POJ 3264 RMQ裸题

    POJ 3264 题意:n个数,问a[i]与a[j]间最大值与最小值之差. 总结:看了博客,记下了模板,但有些地方还是不太理解. #include<iostream> #include&l ...

  9. POJ 1502:MPI Maelstrom Dijkstra模板题

    MPI Maelstrom Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6499   Accepted: 4036 Des ...

  10. POJ 1502 MPI Maelstrom / UVA 432 MPI Maelstrom / SCU 1068 MPI Maelstrom / UVALive 5398 MPI Maelstrom /ZOJ 1291 MPI Maelstrom (最短路径)

    POJ 1502 MPI Maelstrom / UVA 432 MPI Maelstrom / SCU 1068 MPI Maelstrom / UVALive 5398 MPI Maelstrom ...

随机推荐

  1. 一文带你掌握C语言的分支结构

    C语言分支结构详解 1. if 语句 在本篇博客文章中,我们将深入探讨C语言中的if语句及其相关用法.if语句是一种用于条件判断的分支语句,它允许我们根据条件的真假来执行不同的代码块. 1.1 if ...

  2. 生命体征监测VSM

    参考来源:ADI官网技术文章.知乎(hxl695822705.深圳加1健康科技 ) 缩写 全称 翻译 VSM Vital Signs Monitor 生命体征监测 ECG ElectroCardioG ...

  3. WinForm窗体间传值的方法

    窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式: 1.公共静态变量:2.使用共有属性:3.使用委托与事件:4.通过构造函数把主窗体传递到从窗体中: 一.通过静态变量特点: ...

  4. 将多个txt文件中的内容写在一个txt中的方法

    import os filename='./train_data/img_' for i in range(1,19736): newfile=filename+str(i)+'.txt' if os ...

  5. minio集群部署

    minio集群部署 1.说明: 安装前需要再添加一个磁盘后将磁盘挂载到/opt/minio目录,minio集群部署需要独占磁盘分区,不能使用文件夹代替. 运行分布式 MinIO 实例的服务器时间差不应 ...

  6. Linux系统firewall开启关闭相关命令

    默认情况下,我们的服务器没有开放80或443端口,那么我们需要去开放这些端口, CentOS升级到7之后,发现无法使用iptables控制Linuxs的端口,Centos 7使用firewalld代替 ...

  7. OpenWRT的TTYD终端显示已拒绝连接

    更改openwrt软路由后台管理地址后,发现TTYD终端无法连接,显示已拒绝连接,无法使用的解决方法. 解决方法: 1.使用puty工具连接软路由 2.编辑ttyd配置文件 root@OpenWrt: ...

  8. C++ 动态库热加载

    C++ 动态库热加载 本文参考自 project-based-learning 中的 Build a Live Code-reloader Library for C++,主要内容都来自于其中,但是对 ...

  9. SQL语句(mysql)「一」

    SQL的一些常用语句 创建类 CREAT DATABASE <数据库名>; 该方法创建一个数据库,当要使用一个数据库的时候,使用指令: USE <数据库名>; 查看当前正在使用 ...

  10. mysql将查询结果生成临时表

    MySQL中将查询的结果生成临时表,列类型与查询的列一致,百度搜索到的没啥用. 直接上SQL: 将结果生成临时表 create temporary table temp_tb_name as (sel ...