zoukankan      html  css  js  c++  java
  • POJ3255

    题目链接:http://poj.org/problem?id=3255

    解题思路:

      昨晚两点多睡不着翻起来刷《挑战》的题,结果遇到这道求次短路的题,一脸懵逼。想了半小时没什么思路就看他的解答了。具体看代码吧,讲解可以参考《挑战程序设计竞赛》P119。其实还是Dijkstra算法的变形。但是这个变形确实不太好想。

    AC代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <vector>
     4 #include <queue>
     5 using namespace std;
     6 typedef pair<int,int> P;
     7 const int maxn=5000+3,inf=0x7ffffff;
     8 struct edge{
     9     int to,cost;
    10 };
    11 vector<edge> G[maxn];
    12 int d[maxn],d2[maxn];
    13 int main()
    14 {
    15     int N,R,A,B,D;
    16     scanf("%d%d",&N,&R);
    17     while(R--){
    18         scanf("%d%d%d",&A,&B,&D);
    19         edge temp;
    20         temp.cost=D;
    21         temp.to=B;  G[A].push_back(temp);
    22         temp.to=A;  G[B].push_back(temp);
    23     }
    24     priority_queue<P,vector<P>,greater<P> > que;
    25     for(int i=1;i<=N;i++)   d[i]=d2[i]=inf;
    26     d[1]=0;
    27     que.push(P(0,1));
    28     while(!que.empty()){
    29         P p=que.top();  que.pop();
    30         int v=p.second;
    31         if(d2[v]<p.first)   continue;       //如果次短路都比此短,那么就没有更新的必要了
    32         for(int i=0;i<G[v].size();i++){
    33             edge e=G[v][i];
    34             int dt=p.first+e.cost;     //一开始那个p.first被我携程d[v]了,很显然有bug
    35             if(d[e.to]>dt){
    36                 swap(d[e.to],dt);
    37                 que.push(P(d[e.to],e.to));
    38             }
    39             if(d2[e.to]>dt&&dt>d[e.to]){
    40                 d2[e.to]=dt;
    41                 que.push(P(d2[e.to],e.to));
    42             }
    43         }
    44     }
    45     printf("%d
    ",d2[N]);
    46 
    47     return 0;
    48 }
    “这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”
  • 相关阅读:
    Android中Handler与Message的简单实例
    折腾蛋疼的Ubuntu1204LTS的U盘安装
    sgs_intro
    把杀某程序封装成sh
    boost 程序库完全开发_ch4_utility
    VS2005 warning C4819处理办法(提示代码页有不兼容的字符)
    Ubuntu1204LTS下xynxyc编译Emacs24.02
    当VS05调试赋值不对时,小心只是IDE的watch在骗你.....
    很好的boost学习资料
    C++实现Creational Singleton模式
  • 原文地址:https://www.cnblogs.com/Blogggggg/p/7294225.html
Copyright © 2011-2022 走看看