【最短路】SDUT3034--炸学校

炸学校 

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

题目描述

“小儿么小二郎,背着那炸弹炸学校,不怕那太阳晒,也不怕那风雨狂。”估计这首歌我们大家都耳熟能详了。
于是就有一群小学生们商量着炸学校。要把本市的小学的都给炸掉。于是他们商量好了一个出发点source与集合点sink。然后有无数个小学生,n-2个学校,每个小学生都从出发点出发,负责背着一个炸弹,然后把炸弹偷偷放置在一个学校里,然后返回到集合点。
由于这群小学生们还急着回去玩撸啊撸,所以他们想尽快把所有学校都炸完。这里有m条无向路,每条路都连接着u和v这两个学校,经过这条路的时间花费为t。这些小学生只能从这些路中经过。他们同时从出发点出发,他们想知道炸完所有学校并且都回到集合点的最少需要多长时间。

输入

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

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

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

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

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

输出:

输出

对于第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 }

 





转载于:https://www.cnblogs.com/6bing/p/4135660.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

管控研发部门USB设备

前提背景&#xff1a;研发部门图纸经常泄漏&#xff0c;领导说要管控USB,但是要能读&#xff0c;只限制不能写。本想大力推荐Devicelock&#xff0c;因费用原因没了后话&#xff0c;只好使用最基本的域策略进行实施.51CTOblog传图片这么麻烦&#xff0c;还是全部写文字好了。实…

linux系统编程练手项目,精选 22 个 C++ 项目,编程小白练手首选!

C/C 做为元老级的编程语言&#xff0c;任时光更迭依旧屹立不倒&#xff0c;哪怕现在煊赫一时的AI&#xff0c;其底层也是用其编写。linux那么做为新手该如何快速上手 C 呢&#xff1f;固然是敲代码啊&#xff01;一切不写代码的学编程都是瞎搞。下面为你们精选了 22 个 C 项目&…

Swift iOS : WebView缓存图片的方法

广告 Swift iOS开发小书 &#xff0c;帮你快速上手开发 www.ituring.com.cn/book/2413 正文 每次加载WebView内容&#xff0c;如果图片可以缓存的话&#xff0c;速度就会非常快。默认情况下&#xff0c;WebView自己来加载图片&#xff0c;缓存的策略也是自己定的。如想要自己缓…

linux怎么同时查看两个文件,MultiTail - 在单个Linux终端中同时监视多个文件

无论是服务器管理员还是程序员&#xff0c;我们需要参考多个日志文件来有效地排除故障任务。 为了实现这一点&#xff0c;我们必须打开&#xff0c;拖尾或更少的不同shell中的每个日志文件。 但是&#xff0c;我们可以使用传统的tail命令状尾-f在/ var / log / messages文件或尾…

新一代蓝牙5标准开启 会成为物联网的最佳选择吗

在过去&#xff0c;蓝牙在生活中最常见的应用就是键盘、鼠标、音箱和蓝牙耳机&#xff0c;这些传输对频宽要求不高&#xff0c;蓝牙技术的采用不仅节省了线材成本&#xff0c;还增加了产品的灵活性。蓝牙技术联盟(SIG)正式宣布推出新一代标准蓝牙5(Bluetooth 5)&#xff0c;其主…

今日BBC

1、随身英语 Dry January 新年戒酒一个月 link 2、地道英语 Hot potato 棘手的问题“烫手山芋” link 3、今日新闻 Brussels attacks: Belgian police arrest six suspects link The arrests were made in the Schaerbeek district. There is no word yet on the identitie…

c语言中的指针语法,C语言中指针的用法介绍

C语言中指针的用法介绍for(int i0;i{num*s;s;}return num;)这个例子中的函数 fun统计一个字符串中各个字符的 ASCII 码值之和。前面说了&#xff0c;数组的名字也是一个指针。在函数调用中&#xff0c;当把 str 作为实参传递给形参 s后&#xff0c;实际是把 str 的值传递给了 s…

实验吧 貌似有点难 伪造ip

解题链接&#xff1a; http://ctf5.shiyanbar.com/phpaudit/ 解答&#xff1a; 点击View the source code —>代码显示IP为1.1.1.1即可得到KEY—>使用modify header伪造IP—>拿到flag 相关&#xff1a; modify header我也是第一次用&#xff0c;下面附上相关说明&…

用C语言用指针怎么算通用定积分,C语言:利用指针编写程序,用梯形法计算给定的定积分实例...

题目要求利用指针编写程序&#xff0c;用梯形法计算下列公式中的定积分&#xff1a;参考代码首先说明一下指针的用处&#xff1a;因为所传递的参数均为数字&#xff0c;并不需要使用指针提高效率&#xff0c;故这里使用指针指向函数。请注意calc()函数中的这一语句&#xff1a;…

单点登录系统cas资料汇总

http://jasig.github.io/cas/4.0.x/index.html 主页https://jasigcas.herokuapp.com demohttps://wiki.jasig.org/display/CASUM/Home 4.x之前的文档http://jasig.github.io/cas/4.1.x/index.html …

有限小数用c语言,分数化为有限小数或无限循环小数(c实现)

问题描述&#xff1a;将分数转化为小数&#xff0c;相信很多人都会吧&#xff0e;那么&#xff0c;这里给定一个分数N/D,N为分子&#xff0c;D为分母(N,D均为整数)&#xff0c;试编程求出N/D的小数形式&#xff0c;当然如果这个小数为无限循环小数&#xff0c;则把循环的部分用…

你该把前端外包出来了

2019独角兽企业重金招聘Python工程师标准>>> 移动热潮慢慢褪去&#xff0c;大的几个app已经霸占了所有的人桌面&#xff0c;而微信却变得越来越重要。微信里面&#xff0c;提倡H5的应用&#xff0c;H5应用开发成本低、上线快、易调整、跨平台等诸多优势&#xff0c;…

R 统计学工具部署和使用

由于公司内部对于市场数据分析的需求&#xff0c;要求引入R统计工具&#xff0c;并集成到报表工具中。对于R的介绍&#xff0c;大家请百度一下&#xff0c;当然&#xff0c;最好能去看官方的说明 https://www.r-project.org/ 下面简单介绍一下R工具的安装和数据分析工具Spotfir…

USACO Dual Palindromes

输出N个大于s的满足条件的数&#xff0c; 对于满足条件的数的定义是其2-10进制表示中&#xff0c;至少有两种表示为回文串。。还是暴力&#xff1a; /*ID: m1500293LANG: CPROG: dualpal */ #include <cstdio> #include <cstring> #include <algorithm>using…

c语言库函数fgets,C语言 标准I/O库函数 fgets 使用心得

char *fgets(char *s, int n, FILE *stream);参数说明&#xff1a;s --指定存放所读取的数据的位置n -- 指定所读取数据的最大长度(这个最大长度包括了字符串结束符 \0所占据的存储空间&#xff0c;因此&#xff0c;实际最大读取的有效字符数是 n - 1)stream --数据源&#xff…

Android下创建一个输入法

输入法是一种可以让用户输入文字的控件。Android提供了一套可扩展的输入法框架&#xff0c;使得应用程序可以让用户选择各种类型的输入法&#xff0c;比如基于触屏的键盘输入或者基于语音。当安装了特定输入法之后&#xff0c;用户即可在系统设置中选择个输入法&#xff0c;并在…

linux awk f,linux的awk详情(上)

一丶awk介绍AWK是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具&#xff0c;可以报告生成器&#xff0c;格式化文本输出1.常用语法awk [options] ‘program’ varvalue file…awk [options] -f programfile varvalue file…awk [options] BEGIN{ action;… } pa…

C#的async和await

C# 5.0中引入了async 和 await。这两个关键字可以让你更方便的写出异步代码。 看个例子&#xff1a; public class MyClass {public MyClass(){DisplayValue(); //这里不会阻塞System.Diagnostics.Debug.WriteLine("MyClass() End.");}public Task<double> Get…

eclipse创建android工程,在eclipse创建android 工程

1.在工具栏选择"New".在弹出对话框里&#xff0c;开打android文件夹&#xff0c;选择"android application Project"&#xff0c;选择“Next”.2.Application Name: 应用程序名称。Projetc Name: 工程名称。Packet Name: 包名称. 注意&#xff0c;包名称…

SQL select查询原理--查询语句执行原则转

1.单表查询&#xff1a;根据WHERE条件过滤表中的记录&#xff0c;形成中间表&#xff08;这个中间表对用户是不可见的&#xff09;&#xff1b;然后根据SELECT的选择列选择相应的列进行返回最终结果。 1)简单的单表查询 SELECT 字段 FROM 表名 WHERE 条件表达式 那它们是按什么…