河南国控建设集团招标网站,wordpress博客编辑器,大型网站建站公司 上市,重庆建设摩托车质量怎么样题目描述 Description•战争时期#xff0c;前线有n个哨所#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息#xff0c;当然#xff0c;这是要花费一定时间的#xff08;以天为单位#xff09;。指挥部设在第一个哨所。当指挥部下达… 题目描述 Description •战争时期前线有n个哨所每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息当然这是要花费一定时间的以天为单位。指挥部设在第一个哨所。当指挥部下达一个命令后指挥部就派出若干个信使向与指挥部相连的哨所送信。当一个哨所接到信后这个哨所内的信使们也以同样的方式向其他哨所送信。直至所有n个哨所全部接到命令后送信才算成功。因为准备充足每个哨所内都安排了足够的信使如果一个哨所与其他k个哨所有通信联系的话这个哨所内至少会配备k个信使。 • 现在总指挥请你编一个程序计算出完成整个送信过程最短需要多少时间 输入描述 Input Description •第1行有两个整数n和m中间用1个空格隔开分别表示有n个哨所和m条通信线路。1n100。 • 第2至m1行每行三个整数i、j、k中间用1个空格隔开表示第i个和第j个哨所之间存在通信线路且这条线路要花费k天。 输出描述 Output Description 输出文件msner.out仅一个整数表示完成整个送信过程的最短时间。如果不是所有的哨所都能收到信就输出-1。 样例输入 Sample Input •4 4 • 1 2 4 • 2 3 7 • 2 4 1 • 3 4 6 样例输出 Sample Output 11 数据范围及提示 Data Size Hint 1n100 分类标签 Tags 点此展开 思路用Floyed求出最短路径 然后枚举从1-n的节点取最大值 如果还有没有松弛过得点 那么输出-1 原理如果这个图满足条件那么从1一定可以遍历完整个图那么在1所能到达的点中距离最远的一定是最后的点这就是最短路径因为每个节点最少经过一次 1 #includeiostream2 #includecstdio3 #includecstring4 using namespace std;5 int map[101][101];6 int maxn0xf;7 int main() 8 {9 memset(map,maxn,sizeof(map));
10 int n,m;
11 cinnm;
12 for(int i1; im; i)
13 {
14 int x,y,z;
15 scanf(%d%d%d,x,y,z);
16 map[x][y]map[y][x]z;
17 }
18 map[1][1]0;
19 for(int k1; kn; k)
20 {
21 for(int i1; in; i)
22 {
23 for(int j1; jn; j)
24 {
25 if(map[i][j]map[i][k]map[k][j])
26 {
27 map[i][j]map[i][k]map[k][j];
28 }
29 }
30 }
31 }
32
33 int ans-1;
34 for(int i2;in;i)
35 {
36 if(map[1][i]ans)
37 {
38 ansmap[1][i];
39 }
40 else
41 {
42 if(map[1][i]maxn)
43 {
44 cout-1;
45 return 0;
46 }
47 }
48 }
49 coutans;
50 return 0;
51 } View Code 转载于:https://www.cnblogs.com/zwfymqz/p/6690632.html