日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SDUTOJ 3034 ——炸学校

發(fā)布時間:2023/12/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SDUTOJ 3034 ——炸学校 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

“小兒么小二郎,背著那炸彈炸學(xué)校,不怕那太陽曬,也不怕那風(fēng)雨狂。”估計這首歌我們大家都耳熟能詳了。
于是就有一群小學(xué)生們商量著炸學(xué)校。要把本市的小學(xué)的都給炸掉。于是他們商量好了一個出發(fā)點source與集合點sink。然后有無數(shù)個小學(xué)生,n-2個學(xué)校,每個小學(xué)生都從出發(fā)點出發(fā),負(fù)責(zé)背著一個炸彈,然后把炸彈偷偷放置在一個學(xué)校里,然后返回到集合點。 由于這群小學(xué)生們還急著回去玩擼啊擼,所以他們想盡快把所有學(xué)校都炸完。這里有m條無向路,每條路都連接著u和v這兩個學(xué)校,經(jīng)過這條路的時間花費為t。這些小學(xué)生只能從這些路中經(jīng)過。他們同時從出發(fā)點出發(fā),他們想知道炸完所有學(xué)校并且都回到集合點的最少需要多長時間。

輸入

第一行為一個整數(shù)T,表示T組測試數(shù)據(jù)。

第二行為整數(shù)n3<=n<=1000),代表學(xué)校的數(shù)量(包括出發(fā)點和集合點),還有整數(shù)mm<10^5),表示有多少條無向路。

然后接下來是m行,每一行的三個整數(shù)分別是uvt0<=uv?u=v?0<=t<=10^5

然后給出兩個整數(shù)sourcesink,分別代表出發(fā)點和集合點。(0<=sourcesink)。

輸入數(shù)據(jù)保證可以炸毀所有學(xué)校,并且可以到達(dá)集合點。不保證沒有重邊。

輸出:

輸出

對于第x組數(shù)據(jù)輸出一行“Case #x:”,然后是一個整數(shù)表示最少需要的時間。

示例輸入

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

示例輸出

Case #1: 9

提示


兩次最短路算法,從出發(fā)點到各學(xué)校和從集合點到各學(xué)校
#include <iostream> #include <cstdio> #include <cstring>using namespace std;const int inf=1<<28;int mp[1000][1000]; int vis[1000]; int dis[2][1000];void djs(int s,int n,int x) {int i,j;memset(vis,0,sizeof(vis));for(i=0;i<n;i++)dis[x][i]=mp[s][i];vis[s]=1;int k=s;for(i=1;i<n;i++){for(j=0;j<n;j++){if(!vis[j]&&dis[x][j]>dis[x][k]+mp[k][j])dis[x][j]=dis[x][k]+mp[k][j];}int mini=inf;for(j=0;j<n;j++){if(!vis[j]&&mini>dis[x][j])mini=dis[x][k=j];}vis[k]=1;} }int main() {int r,n,m,i,j,k;int u,v,t;int s,e;scanf("%d",&r);for(k=1;k<=r;k++){scanf("%d%d",&n,&m);for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j)mp[i][j]=0;elsemp[i][j]=inf;}for(i=0;i<m;i++){scanf("%d%d%d",&u,&v,&t);if(mp[u][v]>t) //可能有重邊,取用時最少的一條{mp[u][v]=t;mp[v][u]=t;}}scanf("%d%d",&s,&e);djs(s,n,0); //0和1表示從出發(fā)點到各學(xué)校和從集合點到各學(xué)校djs(e,n,1);int maxi=0;for(i=0;i<n;i++)maxi=max(maxi,dis[0][i]+dis[1][i]); //所有學(xué)生同時出發(fā),用時最長的學(xué)生從出發(fā)點到達(dá)了集合點printf("Case #%d: %d\n",k,maxi); //那其他學(xué)生也到達(dá)了集合點}return 0; }

總結(jié)

以上是生活随笔為你收集整理的SDUTOJ 3034 ——炸学校的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。