Convenient Location

Time limit 1000 ms

Memory limit 131072 kB

Problem Description

明年毕业的A为就业而搬家。就职的公司在若干城市都有办公室,不同天出勤的办公室也不同。所以A在考虑住在哪去各个办公室的时长最短。



你为了帮助A,决定去找最方便的居住城市。

城市从0号开始编号,城市之间有道路。不同的道路对应着不同的通勤时间。A 从所住的城市到该城市的办公室的通勤时间认为是 0。此时考虑到所有城市的通勤时间。例如,城市和道路的设置如图所示,A 住在城市 1 的情形下,到不同城市的通勤时间是

到城市 0:80
到城市 1:0
到城市 2:20
到城市 3:70
到城市 4:90 ,总和为 260。

输入道路的数量和所有道路的信息,求出到所有城市的通勤时间最小值和这个最小值对应的城市编号。若有多个城市的总通勤时间都是最小值,输出这些城市编号中的最小值。城市的总数不超过 10,道路的总数不超过 45,所有道路都是双向的,且两个方向的通勤时间是相等的。每个城市到其他任一城市都存在道路。

Input

有多组测试数据,输入由单行 0 终止。每个测试数据格式如下。

n
a1 b1 c1
a2 b2 c2
:
an bn cn

第1行给出道路数目 n (1 ≤ n ≤ 45) 。接下来 n 行给出第 i 个道路的信息。 ai, bi (0 ≤ ai, bi ≤ 9) 是第 i 个道路连接的城市的编号,ci (0 ≤ ci ≤ 100) 是这条道路的通勤时间。

Output

对每个测试数据,输出总通勤时间的最小值和对应最小的城市编号,由空格分开,结尾是换行符。

Sample Input

6
0 1 80
1 2 20
0 2 60
2 3 50
3 4 60
1 4 90
2
0 1 1
1 2 1
0

Output for the Sample Input

2 240
1 2

解题心得:

  1. 因为数据量很小这就很简单了,用每个点跑SPFA然后算出和,直接打印出最小的那个点就是了。

#include <stdio.h>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 50;
int Time[maxn],Min,pos,n;
bool vis[maxn];
vector <pair<int,int> > ve[maxn]; void init() {
pos = -1;
Min = 0x7f7f7f7f;
for(int i=0;i<=n;i++)
ve[i].clear();
int N = 0;
for(int i=1;i<=n;i++) {
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
ve[a].push_back(make_pair(b,c));
ve[b].push_back(make_pair(a,c));
N = max(N,a);
N = max(N,b);
}
n = N;
} void spfa(int s) {
queue <int> qu;
memset(vis,0,sizeof(vis));
memset(Time,0x7f,sizeof(Time));
qu.push(s);
Time[s] = 0;
while(!qu.empty()) {
int now = qu.front(); qu.pop();
vis[now] = false;
for(int i=0;i<ve[now].size();i++) {
int v = ve[now][i].first;
int d = ve[now][i].second;
if(d+Time[now] < Time[v]) {
Time[v] = Time[now] + d;
if(!vis[v]) {
qu.push(v);
vis[v] = true;
}
}
}
}
} bool updata_Min() {
int sum = 0;
for(int i=0;i<=n;i++)
sum += Time[i];
if(sum < Min) {
Min = sum;
return true;
}
return false;
} int main() {
while(scanf("%d",&n) && n) {
init();
for(int i=0;i<=n;i++) {
spfa(i);
if(updata_Min()) {
pos = i;
}
}
printf("%d %d\n",pos,Min);
}
return 0;
}

最新文章

  1. 通过队列解决Lucene文件并发创建索引
  2. java 配置文件读取
  3. 3.12----对potplayer的使用评价
  4. vim中设置自动匹配括号和引号
  5. 编译及load mydqli.so文件
  6. 登陆与注册以及Session
  7. MVC把随机产生的字符串转换为图片
  8. Android开发:怎样定制界面风格
  9. linux之shell编程基本语法
  10. Path通过Selenium模拟浏览器抓取,Windows 64解决selenium.common.exceptions.WebDriverException: Message: &#39;geckodriver&#39; executable needs to be in PATH.方法
  11. url 的正则表达式:path-to-regexp
  12. 组装一台PRUSA I3打印机
  13. FPGA编程—组合逻辑编码器等verilog实现
  14. 动态代理 JDK动态代理 CGLIB代理
  15. geoserver 添加图层数据
  16. C#学习笔记(十四):多态、虚方法和抽象类
  17. [转载]jsonp详解
  18. ZooKeeper学习之路 (四)ZooKeeper开发环境eclipse配置
  19. java把行政区划放到一个节点树形中
  20. mysql 里的 ibdata1 文件不断的增长?

热门文章

  1. iDempiere 使用指南 采购入库流程
  2. Java笔记 —— 初始化
  3. android ContentProvider共享数据
  4. linux系统unzip文件报错的解决方案
  5. JavaMail 的简单使用
  6. 1、HDFS分布式文件系统
  7. ABAP Netweaver和Hybris里获得内存使用统计数据
  8. NO.003-2018.02.08《江城子&#183;乙卯正月二十日夜记梦》宋代:苏轼
  9. IOS 设置ipone状态栏的样式
  10. 安装juicer