http://acm.pku.cn/JudgeOnline/problem?id=3159求最短路Dij,数据太强了
 1
 /**//********************************
/**//********************************
 2 Source Code
Source Code
 3
 4 Problem: 3159  User: Torres
Problem: 3159  User: Torres 
 5 Memory: 3328K  Time: 1422MS
Memory: 3328K  Time: 1422MS 
 6 Language: C++  Result: Accepted
Language: C++  Result: Accepted 
 7 ********************************/
********************************/
 8 #include<iostream>
#include<iostream>
 9 #include<vector>
#include<vector>
10 #include<algorithm>
#include<algorithm>
11 #include<queue>
#include<queue>
12 using namespace std;
using namespace std;
13
14 const int Nmax=30005;
const int Nmax=30005;
15 const int oo=0x7fffffff;
const int oo=0x7fffffff;
16
17
 typedef struct node
typedef struct node {
{
18 int end,len;
    int end,len;
19
 node(int a=0,int b=oo):end(a),len(b)
    node(int a=0,int b=oo):end(a),len(b) {};
{};
20
 bool operator<(const node &a)const
    bool operator<(const node &a)const {
{
21 return this->len>a.len;
        return this->len>a.len;
22 }
    }
23 }node;
}node;
24
25 vector<vector<node> >dist(Nmax);
vector<vector<node> >dist(Nmax);
26 bool used[Nmax];
bool used[Nmax];
27 int N,M,i,j;
int N,M,i,j;
28
29 int Dijkstra(int s,int e)
int Dijkstra(int s,int e)
30

 {
{
31 vector<int>closed(N+1,oo);
    vector<int>closed(N+1,oo);
32
 bool used[Nmax]=
    bool used[Nmax]= {false};
{false};
33 priority_queue<node>q;
    priority_queue<node>q;
34 q.push(node(s,0));
    q.push(node(s,0));
35 closed[s]=0;
    closed[s]=0;
36
 while(!q.empty())
    while(!q.empty()) {
{
37 node ntemp=q.top();
        node ntemp=q.top();
38 q.pop();
        q.pop();
39 if(used[ntemp.end])continue;
        if(used[ntemp.end])continue;
40 if(ntemp.end==e)return ntemp.len;
        if(ntemp.end==e)return ntemp.len;
41 used[ntemp.end]=true;
        used[ntemp.end]=true;
42
43 int sz=dist[ntemp.end].size();
        int sz=dist[ntemp.end].size();
44
 for(j=0;j<sz;j++)
        for(j=0;j<sz;j++) {
{
45 int en=dist[ntemp.end][j].end;
            int en=dist[ntemp.end][j].end;
46 int le=ntemp.len+dist[ntemp.end][j].len;
            int le=ntemp.len+dist[ntemp.end][j].len;
47
 if(!used[en]&&le<closed[en])
            if(!used[en]&&le<closed[en]) {
{
48 closed[en]=le;
                closed[en]=le;
49 q.push(node(en,le));
                q.push(node(en,le));
50 }
            }
51 }
        }
52 
        
53 }
    }
54 return closed[e];
    return closed[e];
55 }
}
56
57 int main()
int main()
58

 {
{
59 int s,e,l;
    int s,e,l;
60 scanf("%d%d",&N,&M);
    scanf("%d%d",&N,&M);
61
 for(i=1;i<=M;i++)
    for(i=1;i<=M;i++) {
{
62 scanf("%d%d%d",&s,&e,&l);
        scanf("%d%d%d",&s,&e,&l);
63 dist[s].push_back(node(e,l));
        dist[s].push_back(node(e,l));
64 }
    }
65 printf("%d\n",Dijkstra(1,N));
    printf("%d\n",Dijkstra(1,N));
66 return 0;
    return 0;
67 }
}
68
69
 
以后用vector定义二维数组用vector<vector<> >v吧,不要vector<>v[]。