23132 Problem A 關鍵路徑

2021-08-25 02:56:51 字數 1803 閱讀 4639

時間限制: 1 sec  記憶體限制: 128 mb

提交: 43  解決: 15

描述:圖的連線邊上的資料表示其權值,帶權值的圖稱作網。

上圖可描述為頂點集為(a,b,c,d,e)

邊集及其權值為(始點,終點 權值):

a b 3

a c 2 

b d 5

c d 7 

c e 4

d e 6            

網的源點是入度為0的頂點,匯點是出度為0的頂點。網的關鍵路徑是指從源點到匯點的所有路徑中,具有最大路徑長度的路徑。上圖中的關鍵路徑為a->c->d->e,其權值之和為關鍵路徑的長度為15。

本題的要求是根據給出的網的鄰接矩陣求該網的關鍵路徑及其長度。

第一行輸入乙個正整數n(1<=n<=5),其代表測試資料數目,即圖的數目

第二行輸入x(1<=x<=15)代表頂點個數,y(1<=y<=19)代表邊的條數

第三行給出圖中的頂點集,共x個小寫字母表示頂點

接下來每行給出一條邊的始點和終點及其權值,用空格相隔,每行代表一條邊。

第乙個輸出是圖的關鍵路徑(用給出的字母表示頂點, 用括號將邊括起來,頂點逗號相隔)

第二個輸出是關鍵路徑的長度

每個矩陣對應上面兩個輸出,兩個輸出在同一行用空格間隔,每個矩陣的輸出佔一行。

2

5 6abcde

a b 3

a c 2

b d 5

c d 7

c e 4

d e 6

4 5abcd

a b 2

a c 3

a d 4

b d 1

c d 3

(a,c) (c,d) (d,e) 15

(a,c) (c,d) 6

這一題也是經典的求關鍵路徑問題,需要注意的是,在e[ i ]==l[ i ]時,將邊儲存起來,最後找到源點進行輸出,否則輸出的路徑順序會不符合要求,其他的就沒啥啦~  睡覺睡覺~(:3[▓▓]

#include #include #include #include #include #include #include using namespace std;

const int maxn=20;

int indegree[maxn];

struct node;};

vectoradj[maxn];

vectorans[maxn];

stacktoposeq;

int n,m,ve[maxn],vl[maxn];

char str[maxn];

mapmp;

bool topologicalsort()

} if(toposeq.size()==n)

return true;

else

return false;

}int criticalpath()

fill(vl,vl+maxn,maxlength);

while(toposeq.size()) }

for(int i=0;ians[i].clear();

for(int u=0;u}

} int s;

for(int i=0;iwhile(ans[s].size())

return maxlength;

}int main()

for(int j=0;jint length=criticalpath();

printf("%d\n",length);

} }return 0;

}

Problem 蛇行矩陣

problem 蛇形矩陣是由1開始的自然數依次排列成的乙個矩陣上三角形。input 本題有多組資料,每組資料由乙個正整數n組成。n不大於100 output 對於每一組資料,輸出乙個n行的蛇形矩陣。兩組輸出之間不要額外的空行。矩陣三角中同一行的數字用乙個空格分開。行尾不要多餘的空格。sample i...

Problem 暴力摩托

原文 time limit 1 sec memory limit 128 mb n個站,之間連了m條雙向的通路!但每條路都規定了乙個速度的限制值,在這條路上必須以這個速度前進!所以在 前進的時候要調整速度,現決定盡量使調整的幅度小一些,也就是使走過的路的速度最大值與最小值之差最小!第一行有2個正整數...

Problem 算式等式

description 給你n個數字,每個數字均不相同,你可以取其中任意個數字相加,如果所得到的結果在給出的數列 中也能找到,則輸出這個等式 input 第一行乙個數字n 接下來n個數字 output 輸出你找到的等式,注意看樣例的輸出格式 sample input 61 3 5 7 8 9 sam...