P1629 邮递员送信(优化Bellman-ford)
题目描述:
有一个邮递员要送东西,邮局在节点 1。
他总共要送 n-1 样东西,其目的地分别是节点 2 到节点 n。
所有的道路都是单行的,共有 m 条道路。
邮递员每次只能带一样东西,运送每件物品过后必须返回邮局。
求送完这 n−1 样东西并最终回到邮局最少需要的时间。
1<=n <=10^3
1<=m<=10^5
这道题数据不大, 用 优化后的 Bellman-ford 和 快读 76msAC
加粗的字表明需要分别计算: 从1到其它所有点的最短路和从其它所有点到1的最短路
#include <bits/stdc++.h>
#define fo(a,b,c) for(int a=b;a<c;a++)
using namespace std;
inline void inn(int & x) {
//快读
int f = 1; x = 0;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') f = -1; ch = getchar();}
while (ch >= '0' && ch <= '9') {
x = x * 10 + ch - '0'; ch = getchar();}
x *= f;
}
int n,m,num;
int main(){
inn(n);inn(m);
n++;
int u[m],v[m],w[m];
fo(i,0,m){
inn(u[i]);inn(v[i]);inn(w[i]);
}
int dis[n],fdis[n];
memset(dis,127,sizeof(dis));
memset