码迷,mamicode.com
首页 > 其他好文 > 详细

[2016-04-02][POJ][2387][Til the Cows Come Home]

时间:2016-04-02 12:12:00      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

  • 时间:2016-04-02 10:34:36 星期六

  • 题目编号:[2016-04-02][POJ][2387][Til the Cows Come Home]

  • 题目大意:给定n个节点和t条路,求n到1的最短路长度

  • 分析:跑一次最短路即可

  • 遇到的问题:

    • 据说是多重边,如果是用邻接矩阵的就要更新最小值,
    • 此题是先输入t,再输入n,输入的时候读错,无限WA…
  1. #include <queue>
  2. #include <cstring>
  3. #include <cstdio>
  4. using namespace std;
  5. const int maxn = 1000 + 10;
  6. const int maxe = 2000 + 10;
  7. struct mNode{
  8. int u,c;
  9. mNode(int _u = 0,int _c = 0):u(_u),c(_c){}
  10. bool operator < (const mNode & a)const{
  11. return c > a.c;
  12. }
  13. };
  14. struct Edge{
  15. int v,c;
  16. Edge(int _v = 0,int _c = 0):v(_v),c(_c){}
  17. };
  18. vector<Edge> e[maxe];
  19. bool vis[maxn];
  20. int d[maxn];
  21. void Dijkstra(int s){
  22. memset(vis,0,sizeof(vis));
  23. memset(d,0x3f,sizeof(d));
  24. priority_queue<mNode> q;
  25. d[s] = 0;
  26. q.push(mNode(s,0));
  27. mNode tmp;
  28. while(!q.empty()){
  29. tmp = q.top();
  30. q.pop();
  31. int u = tmp.u;
  32. if(vis[u]) continue;
  33. vis[u] = 1;
  34. for(int i = 0;i < e[u].size();++i){
  35. Edge & me = e[u][i];
  36. if(!vis[me.v] && d[me.v] > d[u] + me.c){
  37. d[me.v] = d[u] + me.c;
  38. q.push(mNode(me.v,d[me.v]));
  39. }
  40. }
  41. }
  42. }
  43. inline void addedge(int u,int v,int c){
  44. e[u].push_back(Edge(v,c));
  45. }
  46. int main(){
  47. int n,t,a,b,c;
  48. scanf("%d%d",&t,&n);
  49. for(int i = 0;i < t; ++i){
  50. scanf("%d%d%d",&a,&b,&c);
  51. addedge(a,b,c);
  52. addedge(b,a,c);
  53. }
  54. Dijkstra(n);
  55. printf("%d\n",d[1]);
  56. return 0;
  57. }




[2016-04-02][POJ][2387][Til the Cows Come Home]

标签:

原文地址:http://www.cnblogs.com/qhy285571052/p/fa56a3d106dbda764c3e4164a5177926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!