【最短路】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.pswp.cn/news/257946.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257946.shtml
英文地址,請注明出處:http://en.pswp.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 條件表達式 那它們是按什么…