演算法提高 道路和航路
時間限制:1.0s 記憶體限制:256.0mb
問題描述
農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮(標號為1..t),這些城鎮通過r條標號為(1..r)的道路和p條標號為(1..p)的航路相連。
每一條公路i或者航路i表示成連線城鎮ai(1<=a_i<=t)和bi(1<=bi<=t)代價為ci。每一條公路,ci的範圍為0<=ci<=10,000;由於奇怪的運營策略,每一條航路的ci可能為負的,也就是-10,000<=ci<=10,000。
每一條公路都是雙向的,正向和反向的花費是一樣的,都是非負的。
每一條航路都根據輸入的ai和bi進行從ai->bi的單向通行。實際上,如果現在有一條航路是從ai到bi的話,那麼意味著肯定沒有通行方案從bi回到ai。
農夫約翰想把他那優良的牛奶從配送中心送到各個城鎮,當然希望代價越小越好,你可以幫助他嘛?配送中心位於城鎮s中(1<=s<=t)。
輸入格式
輸入的第一行包含四個用空格隔開的整數t,r,p,s。
接下來r行,描述公路資訊,每行包含三個整數,分別表示ai,bi和ci。
接下來p行,描述航路資訊,每行包含三個整數,分別表示ai,bi和ci。
輸出格式
輸出t行,分別表示從城鎮s到每個城市的最小花費,如果到不了的話輸出no path。
樣例輸入
6 3 3 4
1 2 5
3 4 5
5 6 10
3 5 -100
4 6 -100
1 3 -10
樣例輸出
no path
no path50
-95-100
資料規模與約定
對於20%的資料,t<=100,r<=500,p<=500;
對於30%的資料,r<=1000,r<=10000,p<=3000;
對於100%的資料,1<=t<=25000,1<=r<=50000,1<=p<=50000。
//道路和航路
#include #include #include #define inf 0xfffffff
using namespace std;
typedef struct node
node;
vectormap[1001];
bool mark[1001];
int cnt[1001], dis[1001];
int spfa(int var, int n)
dis[var] = 0;
mark[var] = 1;
cnt[var] = 1;
q.push(var);
while(!q.empty())
}for(i = 1; i <= n; i++)
mark[i] = 1;
q.push(i);
}} mark[pre] = 0;
} return 0;
}int main()
for(i = 0; i < p; i++)
spfa(s, t);
for(i = 1; i <= t; i++)
else
}return 0;}/*
6 3 3 4
1 2 5
3 4 5
5 6 10
3 5 -100
4 6 -100
1 3 -10
*/
道路和航路
題目描述 農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1.p 的航路相連。每一條公路i或者航路i表示成連線城鎮ai 1 a i t 和bi 1 bi t 代價為ci。每一條公路,ci的範圍為0 ci 1...
道路和航路
農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1.p 的航路相連。每一條公路i或者航路i表示成連線城鎮ai 1 a i t 和bi 1 bi t 代價為ci。每一條公路,ci的範圍為0 ci 10,000...
演算法提高 道路和航路
演算法提高 道路和航路 時間限制 1.0s 記憶體限制 256.0mb 提交此題 錦囊1 錦囊2 問題描述 農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1.p 的航路相連。每一條公路i或者航路i表示成連...