#include
#include
#include
using namespace std;
const int maxn = 1000005;
struct node
};node *mat1[maxn], *mat2[maxn];
queueq;
node pool[maxn *2 + 2];
int counts;
long long spfa(int n, int s, node *mat)
min[s] = 0;
v[s] = true;
q.push(s);
while (!q.empty())
}p = p->next;}}
sum = 0;
for (i = 0; i < n; i++)
sum += min[i];
return sum;
}int main()
counts = 0;
for (i = 0; i < q; i++)
sum = spfa(p, 0, mat1) + spfa(p, 0, mat2);
printf("%lld/n", sum);
}return 0;
}
貼個模板,POJ 1511
n個點m條邊,有向圖,求1到其餘各點的最短距離與各點到1的距離最短的路徑總和。n m 1e6 樸素必跪。dijkstra堆優化和spfa應該都能過。因為是有向圖,求1到各點的距離,直接原圖上跑spfa。求各點回到1的距離,將邊反轉 from變to to 變from 在新圖上再跑一遍spfa。8s的題...
POJ 1511 雙向單源最短路 SPFA 鄰接表
最近在複習最短路演算法 然後今天在看差分約束系統的時候看到了這一題poj 1511 題目的大意 給出n個點和n條有向邊,求所有點到源點1的來回最短路之和 保證每個點都可以往返源點1 題目意思很簡單,但是資料規模很大,當時知道資料規模很大,用一般的方法肯定會超時或者其他錯誤,但是還是用基礎的方法寫了一...
poj1511解題報告(SPFA演算法)
題目大意 給出n個點和n條有向邊,求所有點到源點1的來回最短路之和 保證每個點都可以往返源點1 解題思路 使用spfa 鄰接鍊錶來做,因為要求來回的最短距離之和,所以先用spfa求一遍最短路,再把每條邊反過來 a到b的邊變成b到a的邊 再用spfa求一遍最短路。注意 結果要用long long 來儲...