Advertisement
Kaidul

12376

May 11th, 2013
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <list>
  14. #include <map>
  15. #include <memory>
  16. #include <queue>
  17. #include <set>
  18. #include <sstream>
  19. #include <stack>
  20. #include <string>
  21. #include <utility>
  22. #include <vector>
  23. #include <iomanip>
  24. using namespace std;
  25. /*** typedef ***/
  26. #define MEMSET_INF 127
  27. #define MEMSET_HALF_INF 63
  28. #define stream istringstream
  29. #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
  30. #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
  31. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  32. #define INF (1<<30)
  33. #define PI acos(-1.0)
  34. #define pb push_back
  35. #define ppb pop_back
  36. #define all(x) x.begin(),x.end()
  37. #define mem(x,y) memset(x,y,sizeof(x))
  38. #define eps 1e-9
  39. #define pii pair<int,int>
  40. #define pmp make_pair
  41. #define ft first
  42. #define sd second
  43. #define vi vector<int>
  44. #define vpii vector<pii>
  45. #define si set<int>
  46. #define msi map<string , int >
  47. #define mis map<int , string >
  48. typedef long long i64;
  49. typedef unsigned long long ui64;
  50. /** function **/
  51. #define SDi(x) sf("%d",&x)
  52. #define SDl(x) sf("%lld",&x)
  53. #define SDs(x) sf("%s",x)
  54. #define SD2(x,y) sf("%d%d",&x,&y)
  55. #define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
  56. #define pf printf
  57. #define sf scanf
  58. #define READ(f) freopen(f, "r", stdin)
  59.  
  60. /* Main Code */
  61.  
  62. #define Max 110
  63. #define Range 5000
  64.  
  65. class Compare {
  66. public:
  67.     int operator() ( const pii& p1, const pii& p2 ) {
  68.         return p1.second > p2.second;
  69.     }
  70. };
  71. priority_queue <pii, vector<pii>, Compare> q;
  72. vector <pii> adj[Range];
  73. int dis[Max], cost[Max];
  74.  
  75. void reset() {
  76.     q = priority_queue <pii, vector<pii>, Compare> ();
  77.     rep(i, Max) dis[i] = -1;
  78. }
  79.  
  80. pair <int, int> dijkstra(int src) {
  81.     reset();
  82.     int sum = 0, end = 0, max;
  83.     dis[src] = 0;
  84.     q.push(pii(src, dis[src]));
  85.     while(!q.empty()) {
  86.         int u = q.top().first;
  87.         q.pop();
  88.         max = -1;
  89.         rep(i, (int)adj[u].size()) {
  90.             int v = adj[u][i].first;
  91.             int cost = adj[u][i].second;
  92.             if(max < cost) max = cost, end = v;
  93.         }
  94.         if(max > 0) sum += max, q.push(pii(end, max));
  95.     }
  96.     return make_pair(sum, end);
  97. }
  98.  
  99. int main() {
  100.     READ("input.txt");
  101.     int vertex, edge, u, v, src, des, tcase, caseNo = 1;
  102.     SDi(tcase);
  103.     while(tcase--) {
  104.         SD2(vertex, edge);
  105.         rep(i, vertex) SDi(cost[i]);
  106.         rep(i, edge) {
  107.             SD2(u, v);
  108.             adj[u].pb(pii(v, cost[v]));
  109.         }
  110.         src = 0;
  111.         pair <int, int> result = dijkstra(src);
  112.         pf("Case %d: %d %d\n", caseNo, result.first, result.second);
  113.         rep(i, vertex + 10) adj[i].clear();
  114.         caseNo++;
  115.     }
  116.  
  117.     return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement