思路:1:開兩個vector>,乙個邊的權值全部初始化為0,另乙個正常按題目邊的權值存
2:如果該路被破壞,那麼就把正常存的數值copy到要用的vector>中,即保證沒有被破壞的路的權值在計算的時候當作0來處理
3:跑spfa演算法
演算法:spfa
#include using namespace std;
const int maxn=101;
vector>e[maxn],w[maxn];
int n,m,a,b,c,dg,s,t,d[maxn],ing[maxn];
inline void init()
}int main()
cin>>dg;
for(int i=0;i>a>>b;
for(int i=0;i>s>>t;
queueq;
q.push(s);
d[s]=0;
ing[s]=1;
while(!q.empty())}}
cout
}
洛谷P3905 道路重建
此題是顯然的最短路演算法,只是看到一起刪掉的一堆邊感到十分棘手,而且還要求出的是最短新增邊的總長度 但如果仔細觀察就可以發現,我們其實並不用乙個乙個的全部列舉,只需要把新增的邊做最短路就行了。我們可以首先把陣列初始化為乙個較大的數,然後每讀入一條邊,就把此邊的權值記錄,但還要把它清零。為什麼呢?因為...
道路重建 洛谷P3905
題目描述 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1 n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p ...
洛谷P3905 道路重建
此題是顯然的最短路演算法,只是看到一起刪掉的一堆邊感到十分棘手,而且還要求出的是最短新增邊的總長度 但如果仔細觀察就可以發現,我們其實並不用乙個乙個的全部列舉,只需要把新增的邊做最短路就行了。我們可以首先把陣列初始化為乙個較大的數,然後每讀入一條邊,就把此邊的權值記錄,但還要把它清零。為什麼呢?因為...