CSU暑期集訓day05 DFS 單源最大權路徑

2021-08-21 20:12:36 字數 1034 閱讀 7088

有一棵由n個結點構成的樹,每一條邊上都有其對應的權值。現在給定起點,求從該點出發的一條路徑(至少有一條邊)使得這條路徑上的權值之和最大,並輸出這個最大值。

第一行乙個正整數t,代表資料組數。每組資料第一行兩個正整數n(2<=n<=10^5),s(1<=s<=n),分別表示樹結點數目以及給定的起點,點的編號從1至n。接下來m行,每行三個整數x,y,z,(1<=x,y<=n,|z|<=1000),代表編號為x和y的點之間有一條權值為z的雙向邊。

每組資料輸出一行,即所找到路徑的最大權值(格式參見樣例)。

2

3 11 2 10

1 3 5

5 51 5 70

4 3 100

5 3 -10

2 5 60

case #1: 10

case #2: 90

這題思路比較明確,由指定點出發深度優先遍歷,無路可走的時候就可以結束,將當前路徑權值參與比較選出最大的。我做這道題的時候卻一波三折,主要是在糾結結點的儲存問題,因為題目要求點的數目較多,直接設定二維陣列儲存會報錯,然後我改用vector弄個二維陣列,卻還是報錯,又改用結構體,結構體元素中有個鄰居陣列,點的數目有100000,也只好給鄰居陣列也設定大小100000,然後再用vector,還是報錯,,,,所幸最後終於弄對了,出現這種情況的根本原因還是自己太菜了,對stl使用不熟練,不靈活。

#include

#include

#include

using namespace std;

struct edge;

vectorve[100002];

int n,s;

bool visi[100002];

long long int maxa=0;

void dfs(int s,int ans)

int main()     

dfs(s,0);      

cout<<"case #"<} system("pause");

return 0;

}

CSU暑期集訓day06 平衡等式

寫乙個程式要求當輸入在整數範圍內的乙個整數r後,計算機便會檢查,在下式 處能否填上 或 號湊成相應等式。如能湊成,則印出所有這些等式的個數。注意,考慮符號的優先順序。1 2 3 4 5 6 7 8 9 r 只有一行,就是乙個整數r。只有一行,就是使等式成立的個數。遍歷每乙個位置可以放的符號的所有情況...

ACM暑期集訓day02 修路

前段時間,某省發生乾旱,b山區的居民缺乏生活用水,現在需要從a城市修一條通往b山區的路。假設有a城市通往b山區的路由m條連續的路段組成,現在將這m條路段承包給n個工程隊 n m 300 為了修路的便利,每個工程隊只能分配到連續的若干條路段 當然也可能只分配到一條路段或未分配到路段 假設每個工程隊修路...

暑期集訓Day 20 24 總結 (資料結構)

轉眼間,暑期訓練已經過了大半了。這半個多月以來也做了很多題,不過還是個菜雞。上乙個專題是字串專題,不過因為那個專題的題目沒有寫多少,所以。放到以後等做的題多一些再更新吧 這兩天學資料結構確實收穫不少,雖說之前對線段樹,bit這些早有耳聞,不過也僅僅是限於了解的層面,沒有像最近幾天系統的訓練過。漲了很...