2014北郵網研上機試題D

2021-09-11 05:04:51 字數 1750 閱讀 9236

目錄

problem d 網路傳輸

題目描述

輸入格式

輸出格式 思路

**積累知識

oj提交鏈結

網路的高效互聯與智慧型傳輸是提公升海量使用者服務請求對映效率的重要措施。在這個任務中,你要用最少的傳輸時間,將特定的資料來源傳送到指定的網路節點中。

我們給定的網路一共包含n個節點(從1到n編號),其中節點1為資料來源。網路中有m條無向邊(u,v,w),表示一條傳輸線連線節點u和節點v,且資料通過這條傳輸線的平均時間為w。由於傳送機制的限制,當乙個節點接收到資料之後,它只能選擇與它互連的乙個節點,並將資料**到該節點。節點1在初始化時只會傳送一次資料,但在傳輸過程中它可以作為**節點。

網路中有k個目標節點,你需要計算出該資料從節點1傳送到所有k歌節點所需要的最短時間。注意目標節點可以按任意順序進行傳送,資料也可以多次經過同一節點。

輸入資料第一行是乙個整數t(t<=5),表示測試資料的組數。

對於每組測試資料:

第一行是三個正整數n,m,k(2<=n<=1000,1<=m<=n(n-1)/2,k<=10),分別表示節點數,邊數和目標節點數。

接下來m行,每行三個整數u,v,w(1<=u,v<=n, 0<=w<=1000,u!=v)。如上所述給出每條傳輸線。任意兩個網路節點之間最多隻會有一條邊相連。

最後一行是k個整數,給出所有的目標節點的編號,所有目標節點的編號都在2到n之間。  

對於每組測試資料,輸出資料傳送到所有k個目標節點的最短時間。

樣例輸入

23 2 2

1 3 1

1 2 3

2 36 6 4

1 5 1

5 6 2

2 1 20

2 3 5

3 4 5

6 3 1

2 3 4 6

樣例輸出519

樣例說明

在第一組樣例中,最短路線是:1->3->1->2

在第二組樣例中,最短路線是:1->5->6->3->2->3->4,或者1->5->6->3->4->3->2

借鑑了大神的部落格才做出來,dijkstra演算法+全排列,先將k個目標結點進行全排列,利用dijkstra演算法得到組合間相鄰節點的代價,相加比較求最小。注意先利用dijkstra演算法得到距離,存至乙個二維陣列中,各個組合在二維陣列中取數。

#include#includeusing namespace std;

const int maxv=1010;

const int inf=1000000000;

int n,m,s,g[maxv][maxv];

int d[maxv];

bool vis[maxv]=;

int dis[maxv][maxv]; //記錄各點間最小距離

void dijkstra(int s){ //s為起點

fill(d,d+maxv,inf); //fill函式將整個d陣列賦為inf

fill(vis,vis+maxv,false);

d[s]=0; //起點s到自身距離為0

for(int i=1;i<=n;i++){

int u=-1,min=inf; //u使d[u]最小,min存放該最小的d[u]

for(int j=1;j<=n;j++){ //找到未訪問的頂點中d最小的

if(vis[j]==false && d[j]dijkstra演算法模板

全排列演算法

2014北郵網研上機試題B

給定一棵帶權二叉樹,請判斷它是不是乙個最小堆。一棵二叉樹是乙個最小堆,當且僅當對於樹上任意乙個節點,它的權值都小於或等於以它為根的子樹中的所有權值。輸入資料第一行是乙個整數t 1 t 100 表示測試資料的組數。對於每組測試資料 第一行是乙個整數n 1 n 100 表示樹的節點個數。接下來一行包含n...

北郵網研17上機題

找1 1000000000內所有可開二次根且可開三次根的數。別直接for迴圈,肯定超時。先把所有可能的答案都找出來,再做二次判斷。輸入9 81 4 8 5 7 9 2 2 5 3 5 5 9 3 5 8 3 4 3 8 5 7 9 5 1 9 輸出 1826 2040 include 在這裡插入描述...

2012北郵網研院上機題

a 列印字串 時間限制 1000 ms 記憶體限制 65536 kb 題目描述 老師有乙個問題想考考mabo,但是mabo不會,所以想請你來幫幫忙。問題如下 給一串字串,統計其中某個字元的個數。輸入格式 首先輸入乙個整數t,表示一共有t組資料 0 t 10。接下來每行乙個字母x x為 a z 或者 ...