SDUT3034--炸学校(最短路)

炸学校

Time Limit: 2000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

“小儿么小二郎,背着那炸弹炸学校,不怕那太阳晒,也不怕那风雨狂。”估计这首歌我们大家都耳熟能详了。
于是就有一群小学生们商量着炸学校。要把本市的小学的都给炸掉。于是他们商量好了一个出发点source与集合点sink。然后有无数个小学生,n-2个学校,每个小学生都从出发点出发,负责背着一个炸弹,然后把炸弹偷偷放置在一个学校里,然后返回到集合点。

由于这群小学生们还急着回去玩撸啊撸,所以他们想尽快把所有学校都炸完。这里有m条无向路,每条路都连接着u和v这两个学校,经过这条路的时间花费为t。这些小学生只能从这些路中经过。他们同时从出发点出发,他们想知道炸完所有学校并且都回到集合点的最少需要多长时间。

输入

第一行为一个整数T,表示T组测试数据。

第二行为整数n(3<=n<=1000),代表学校的数量(包括出发点和集合点),还有整数m(m<10^5),表示有多少条无向路。

然后接下来是m行,每一行的三个整数分别是u,v,t(0<=u,v, u!=v, 0<=t<=10^5)

然后给出两个整数source和sink,分别代表出发点和集合点。(0<=source,sink)。

输入数据保证可以炸毁所有学校,并且可以到达集合点。不保证没有重边。

输出:

输出

对于第x组数据输出一行“Case #x:”,然后是一个整数表示最少需要的时间。

示例输入

1
5 5
1 0 1
1 2 3
1 3 3
4 2 2
3 4 1
4 2

示例输出

Case #1: 9

题意:设一个起点和一个终点,一群小学生(>=n),他们分别从起点出发,然后每个人都背着炸药去炸学校,炸完后再回到终点,求最短时间。注意:他们是同时出发。

    可以这样求,假设起点和终点分别为(x,y),则以x为起点求到其它点的最短路径,存起来。然后再以y为起点,求到其它点的最短路径。求完后把到相同点的最短路径加起来,假设值为D,则要求最大的一个D,因为只有这样,才可以满足条件使每个小学生都可以把学校炸了。
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6
 7 int  T, n, m;
 8 const int maxnum = 1002;
 9 const int maxint = 1000000;
10
11 int dis[maxnum], p[maxnum];//最短路径数组
12 int mapp[maxnum][maxnum];//建图
13
14 void init()  //初始化mapp数组
15 {
16     int i, j;
17     for(i=0; i<n; i++)
18     {
19         for(j=0; j<n; j++)
20         {
21             if(i!=j)
22                 mapp[i][j] = maxint;
23             else mapp[i][j] = 0;
24         }
25     }
26 }
27
28 void Dijkstra(int x, int y)   //dijkstra最短路算法
29 {
30     bool vis[maxnum];
31     int i;
32     for(i=0; i<n; i++){
33         dis[i] = mapp[x][i];
34         vis[i] = 0;
35     }
36     dis[x] = 0;
37     vis[x] = 1;
38
39     for(i=2; i<=n; i++){
40         int tmp = maxint;
41         int pos = 1;
42         for(int j=0; j<n; j++)
43             if((!vis[j]) && dis[j]<tmp && j!=x){
44                     pos = j;
45                     //printf("pos = %d\n", pos);
46                     tmp = dis[j];
47             }
48             vis[pos] = 1;
49
50     for(int j=0; j<n; j++)
51         if((!vis[j]) && mapp[pos][j] < maxint)
52     {
53         int newdis = dis[pos] + mapp[pos][j];
54         if(newdis < dis[j])
55         {
56             dis[j] =  newdis;
57         }
58     }
59   }
60   for(i=0; i<n; i++)
61   {
62       p[i] += dis[i];
63   }
64 }
65
66 int main()
67 {
68
69     int x, y, c, i, k=1;
70     scanf("%d", &T);
71     while(T--)
72     {
73         scanf("%d%d", &n, &m);
74         memset(p, 0, sizeof(p));
75         init();
76         for(i=0; i<m; i++)
77         {
78             scanf("%d%d%d", &x, &y, &c);
79             if(mapp[x][y]>c) //有重边的情况
80             {
81                 mapp[x][y] = c;
82                 mapp[y][x] = c;
83             }
84         }
85         scanf("%d%d", &x, &y);
86         Dijkstra(x, y);
87         Dijkstra(y, x);
88         sort(p, p+n);
89         printf("Case #%d: %d\n",k++, p[n-1]);
90    }
91    return 0;
92 }
				
时间: 2024-10-27 11:49:44

SDUT3034--炸学校(最短路)的相关文章

unity(Exploder插件)研究

哎 好久没写博客了 不是因为最近忙 而是比较懒 学的东西不深入 前段时间发现一个很好用的插件叫Exploder(是一个可以制作任何物体的爆炸效果) 好!我们开始我们的炸学校旅程!(O(∩_∩)O哈哈~ 开玩笑了) 不过这次我们使用的模型就是一个学校模型 首先:我们在学校中安装一个炸弹 --将插件中的Exploder预制体拖进去 选中要爆炸的物体 tag层设置为Exploder 开始撸代码~~~ using System.Collections; using System.Collections.

HTML5基础小结(二)——标签小例

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amlhaGFuNjI5NjI5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /> 随篇博客的思维导图.继续: 二.看下标签的使用,这里看几个小样例(效果图不再给出): 1.结构标签的使用,这里来看一个页面的布局: <!doctype html> <html> &

bzoj 1880 [Sdoi2009]Elaxia的路线(最短路+拓扑序)

Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是Elaxia和w**所在的宿舍和实验室的编号以及学校的地图:地图上有N个路 口,M条路,经过每条路都需要一定的时间. 具体地说,就是要求无向图中,两对点间最短路的最长公共路径. Input 第一行:两个整数N和M(含义如题目描述).

BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )

找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 -------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #incl

[kuangbin带你飞]专题四 最短路练习

A. POJ 2387  Til the Cows Come Home 模板题. #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<vector> #include<string> #include<map> #include<queue> #in

网络提速(最短路)

codevs——1243 网络提速 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 某学校的校园网由n(1<=n<=50)台计算机组成,计算机之间由网线相连,如图5.其中顶点代表计算机,边代表网线.正如你所见,不同网线的传输能力不尽相同,例如计算机1与计算机2之间传输信息需要34秒,而计算机2与计算机3之间的传输信息只要10秒.计算机1与计算机5之间传输信息需要44秒,途径为机1到机3到机5. 现学校购买了m(1<

【最短路】ACdream 1198 - Transformers&#39; Mission

Problem Description A group of transformers whose leader is Optimus Prime(擎天柱) were assigned a mission: to destroy all Decepticon's(霸天虎) bases. The bases are connected by roads. They must visit each base and place a bomb there. They start their missi

16.网络提速(最短路)

网络提速(最短路) 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 某学校的校园网由n(1<=n<=50)台计算机组成,计算机之间由网线相连,如图5.其中顶点代表计算机,边代表网线.正如你所见,不同网线的传输能力不尽相同,例如计算机1与计算机2之间传输信息需要34秒,而计算机2与计算机3之间的传输信息只要10秒.计算机1与计算机5之间传输信息需要44秒,途径为机1到机3到机5. 现学校购买了m(1<=

BZOJ 1266: [AHOI2006]上学路线route(最短路+最小割)

第一问最短路.第二问,先把最短路的图建出来(边(u,v)满足d[s->u]+d[v->t]+d(u,v)==最短路径长度,就在图中,可以从源点和汇点分别跑一次最短路得到每个点到源点和汇点的最短路),然后跑一遍最大流就OK了. --------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #