单身晚会

Time Limit: 1000 MS Memory Limit: 65536 KB
Total Submissions: 53 Accepted: 16

Description

​ZJ和ZCX在一起很久了,两个人都互生爱意,最终决定喜结良缘,从此踏入浪漫的婚姻殿堂。

但是,ZJ的好基友们想到以后ZJ就不能经常跟他们一起愉快的玩耍了,都觉得非常伤心难过,于是他们决定在最后一晚为ZJ开一场单身晚会,玩整晚紧张刺激的飞行棋。

ZJ的好基友居住在城市的各个地方(每个地方不一定只有一个基友),他们需要从各个地方赶到其中一个朋友的家里来参加这最后的单身PARTY,ZJ被基友们的热情深深感动了,决定对基友们来时的路费进行报销。报销规则按照距离来计算。基友们为了帮ZJ省钱,决定在所有人走最短路径的情况下,总距离最小的人的家里开PARTY。

ZJ想知道基友们走过的总距离是多少,然后他把总共需要报销的钱拿出来,就可以让基友们自己来分配了。但是他算了半天也没算出来总距离是多少,单身PARTY马上就开始了,你能帮帮他吗?

Input

         第一行一个整数T,表示有T(T<15)组数据

每组数据的第一行基友数(包括ZJ)N(N<100),路口P(2<=P<=100),路口之间道路数C(1<=C<=1450),(基友的编号为1…N,路口的编号为1…P)

第二行到第N+1行:编号为1到N的基友们家所在的路口号。

第N+2行到N+C+1行:每行有三个数:相连的路口A,B,路口间间距D(1<=D<=255),当然,连接是双向的。

Output

每组数据输出占一行,输出大家必须要走的最小距离和

Sample Input

1

3 4 5

2

3

4

1 2 1

1 3 5

2 3 7

2 4 3

3 4 5

Sample Output

8

Hint

经测试,本题数据和题意不符合,现对题意做如下修正:

选择一个路口(不一定要有人住),使所有人到这个路口的路程和最小化

这题应该是省赛现场修改题意,但这里用的是原题意,特此说明。对被卡的同学再次表示歉意。对其他题目有疑义的可以发信件给账号instankill询问。

这道题在省赛中改过题意,重新A时发现自己很多次也提交不过,感觉Hint的注意也写的不是很清晰。
题解:这道题是典型的利用Floyd算法求最短路径的问题,有关Floyd算法此处省略,网上有很多,介绍的也很详细。先利用Floyd算法求出任意两个路口的最短路径。最后求任意一个路口到所有基友的距离之和,最后找到最小值,也就是在路口也是可以开party的。一开始也是没明白题意,理解成要在基友家里开party,所以老是Wrong Answer。只要注意这点应该就没有问题了

#include <iostream>
#include <cstdio>
#include <cstring>
typedef long long LL;
const LL INF = 1000000000; using namespace std; int a[101];
LL L[101][101];
int n, p, c; void floyd() //Floyd最短路径算法
{
for (int k=1; k<=p; k++)
for (int i=1; i<=p; i++)
for (int j=1; j<=p; j++)
L[i][j] = min(L[i][j], L[i][k]+L[k][j]);
} int main()
{
int t;
scanf("%d", &t);
while (t--)
{
scanf("%d%d%d", &n, &p, &c);
for (int i=1; i<=n; i++)
scanf("%d", &a[i]);
int A, B, D;
for (int i=1; i<=p; i++)
for (int j=1; j<=p; j++)
L[i][j] = INF;
for (int i=1; i<=p; i++)
L[i][i] = 0;
for (int i=0; i<c; i++) {
scanf("%d%d%d", &A, &B, &D);
L[A][B] = D;
L[B][A] = D;
}
floyd();
LL Smin = INF, s = 0;
for (int i=1; i<=p; i++) {
s = 0;
for (int j=1; j<=n; j++) {
if (L[i][a[j]] >= INF) //先排除无穷大的边
goto to; //出现就进入下一次循环
s += L[i][a[j]];
}
Smin = min(Smin, s); //求出每次的最短路径
to:;
}
printf("%d\n", Smin);
}
return 0;
}

安徽省2016“京胜杯”程序设计大赛_H_单身晚会的更多相关文章

  1. 安徽省2016“京胜杯”程序设计大赛_K_纸上谈兵

    纸上谈兵 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 3 Accepted: 1 Description     战国时 ...

  2. 安徽省2016“京胜杯”程序设计大赛_J_YZK的大别墅

    YZK的大别墅 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 24 Accepted: 12 Description 土豪 ...

  3. 安徽省2016“京胜杯”程序设计大赛_I_恶魔A+B

    恶魔A+B Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 73 Accepted: 17 Description 相信大家 ...

  4. 安徽省2016“京胜杯”程序设计大赛_G_木条染色

    木条染色 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 134 Accepted: 20 Description    小 ...

  5. 安徽省2016“京胜杯”程序设计大赛_F_吃在工大

    吃在工大 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 51 Accepted: 15 Description      ...

  6. 安徽省2016“京胜杯”程序设计大赛_E_转啊转

    转啊转 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 59 Accepted: 15 Description     在二 ...

  7. 安徽省2016“京胜杯”程序设计大赛_D_梯田AGAIN

    梯田AGAIN Time Limit: 5000 MS Memory Limit: 65536 KB Total Submissions: 95 Accepted: 21 Description 大家 ...

  8. 安徽省2016“京胜杯”程序设计大赛_C_箭无虚发

    箭无虚发 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 128 Accepted: 21 Description      ...

  9. 安徽省2016“京胜杯”程序设计大赛_B_阵前第一功

    阵前第一功 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 63 Accepted: 29 Description A国每个 ...

随机推荐

  1. php中的冒泡排序算法

    <?php //php中的冒泡排序算法 //从大到小的排序方式 ,$arr[$j]>$arr[$j+1](这里换成了从小到大的排序方式) $arr=array(); $arr=array( ...

  2. shell 中最常使用的 FD (file descriptor)

    在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是: 0 是一个文件描述符,表示标准输入(stdin)1 是一个文件描述符,表示标准输出(stdout) ...

  3. 一起学习c++11——c++11中的新语法

    c++11新语法1: auto关键字 c++11 添加的最有用的一个特性应该就是auto关键字. 不知道大家有没有写过这样的代码: std::map<std::string, std::vect ...

  4. [leetcode-556-Next Greater Element III]

    Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...

  5. Struts2请求参数合法性校验机制

    在Action中通过代码执行数据校验 请求参数的输入校验途径一般分两种:客户端校验 :通过JavaScript 完成 (jquery validation插件),目的:过滤正常用户的误操作. 服务器校 ...

  6. Chrome浏览器扩展开发系列之十:桌面通知Notification

    Desktop Notification也称为Web Notification,是在Web页面之外,以弹出桌面对话框的形式通知用户发生了某事件.Web Notification于2015.9.10成为 ...

  7. JavaWeb 后端 <十二> 之 过滤器 filter 乱码、不缓存、脏话、标记、自动登录、全站压缩过滤器

    一.过滤器是什么?有什么? 1.过滤器属于Servlet规范,从2.3版本就开始有了. 2.过滤器就是对访问的内容进行筛选(拦截).利用过滤器对请求和响应进行过滤

  8. 微信小程序的登陆流程详解

    由于小程序的登陆和登陆状态维护流程比较复杂,需要客户端和服务器的数次交互以及服务器端的相应处理,很多同学都觉得比较麻烦,所以特别写下这篇博客为大家梳理一下微信的登陆流程,同时加深对微信小程序与登陆状态 ...

  9. raft如何实现leadership transfer

    leadership transfer可以把raft group中的leader身份转给其中一个follower.这个功能可以用来做负载均衡,比如可以把leader放在性能更好的机器或者离客户端更近的 ...

  10. 对sppnet网络的理解

    前言: 接着上一篇文章提到的RCNN网络物体检测,这个网络成功的引入了CNN卷积网络来进行特征提取,但是存在一个问题,就是对需要进行特征提取图片大小有严格的限制.当时面对这种问题,rg大神采用的是对分 ...