标签:des style blog http java color
2 2 2 1 2 13 2 1 33 4 6 1 2 10 2 1 60 1 3 20 3 4 10 2 4 5 4 1 50
46 210
解题:spfa无疑啊,当然用优先队列优化了的dijkstra也是可以的,Bellman-Ford直接TLE。此题有大坑,使用单源最短路径算法时,需要保证INF足够大,最好比INT的最大值大,否则一直WA,让人摸不着头脑啊。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #include <cstdlib> 10 #include <string> 11 #include <set> 12 #define LL long long 13 #define INF 0xffffffff 14 using namespace std; 15 const int maxn = 1000005; 16 struct arc { 17 int to,w; 18 }; 19 int u[maxn],v[maxn],w[maxn],n,m; 20 LL d[maxn]; 21 vector<arc>g[maxn]; 22 queue<int>qu; 23 bool used[maxn]; 24 void spfa() { 25 int i,j; 26 for(i = 2; i <= n; i++) 27 d[i] = INF; 28 d[1] = 0; 29 memset(used,false,sizeof(used)); 30 while(!qu.empty()) qu.pop(); 31 qu.push(1); 32 used[1] = true; 33 while(!qu.empty()) { 34 int temp = qu.front(); 35 used[temp] = false; 36 qu.pop(); 37 for(i = 0; i < g[temp].size(); i++) { 38 j = g[temp][i].to; 39 if(d[j] > d[temp]+g[temp][i].w) { 40 d[j] = d[temp]+g[temp][i].w; 41 if(!used[j]) { 42 qu.push(j); 43 used[j] = true; 44 } 45 } 46 } 47 } 48 } 49 int main() { 50 int t; 51 scanf("%d",&t); 52 while(t--) { 53 int i,j; 54 scanf("%d%d",&n,&m); 55 for(i = 1; i <= n; i++) 56 g[i].clear(); 57 for(i = 1; i <= m; i++) { 58 scanf("%d%d%d",u+i,v+i,w+i); 59 g[u[i]].push_back((arc) {v[i],w[i]}); 60 } 61 LL ans = 0; 62 spfa(); 63 for(i = 1; i <= n; i++){ 64 ans += d[i]; 65 g[i].clear(); 66 } 67 for(i = 1; i <= m; i++) 68 g[v[i]].push_back((arc) {u[i],w[i]}); 69 spfa(); 70 for(i = 2; i <= n; i++) 71 ans += d[i]; 72 printf("%I64d\n",ans); 73 } 74 return 0; 75 }
图论trainning-part-1 E. Invitation Cards,布布扣,bubuko.com
图论trainning-part-1 E. Invitation Cards
标签:des style blog http java color
原文地址:http://www.cnblogs.com/crackpotisback/p/3860737.html