zoukankan      html  css  js  c++  java
  • HDU2544-最短路-dijikstra板子

     1 #include <cmath>
     2 #include <queue>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <iostream>
     7 #include <algorithm>
     8 using namespace std;
     9 struct edge{
    10     int next,v,w;
    11     edge(int next=0,int v=0,int w=0):next(next),v(v),w(w){}
    12 };
    13 
    14 const int MAXN=105,MAXM=10005;
    15 
    16 int head[MAXN],cnt;edge e[MAXM*2];
    17 void init_G(){cnt=0,memset(head,0,sizeof(head)),memset(e,0,sizeof(e));}
    18 
    19 void add(int u,int v,int w){
    20     e[++cnt]=edge(head[u],v,w),head[u]=cnt;
    21     e[++cnt]=edge(head[v],u,w),head[v]=cnt;
    22 }
    23 
    24 struct node{
    25     int dis,u;
    26     bool operator<(const node NEXT)const{return dis<NEXT.dis;}
    27     node(int dis=0,int u=0):dis(dis),u(u){}
    28 };
    29 
    30 int d[MAXN];void init_d(int n){for(int i=1;i<=n;i++)d[i]=1e9;}
    31 
    32 int dijkstra(int s,int t){
    33     init_d(t);
    34     priority_queue<node>q;
    35     d[s]=0,q.push(node(0,s));
    36     for(int u,v;!q.empty();){
    37         u=q.top().u,q.pop();
    38         for(int i=head[u];i;i=e[i].next){
    39             v=e[i].v;
    40             if(d[v]>d[u]+e[i].w) {
    41                 d[v]=d[u]+e[i].w;
    42                 q.push(node(d[v],v));
    43             }
    44         }
    45         
    46     }
    47     return d[t];
    48 }
    49 
    50 int main(){
    51     for(int n,m;scanf("%d%d",&n,&m),n+m;){
    52         init_G();
    53         for(int i=1,A,B,C;i<=m;i++)cin>>A>>B>>C,add(A,B,C);            
    54         cout<<dijkstra(1,n)<<endl;
    55     }
    56     return 0;
    57 }

    有些没用的板子!

     1 #include <cmath>
     2 #include <queue>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <iostream>
     7 #include <algorithm>
     8 using namespace std;
     9 struct point{
    10     int a,b;
    11     point(int a=0,int b=0):a(a),b(b){}
    12     bool operator<(const point NEXT)const{return (a==NEXT.a)?(b<NEXT.b):(a<NEXT.a);}
    13     void out(){printf("(%d,%d)",a,b);}
    14 };
    15 
    16 bool comp(point A,point B){return (A.a==B.a)?(A.b>B.b):(A.a<B.a);}
    17 
    18 void sortForTwoSet(){
    19     point A[5]={point(1,2),point(1,4),point(2,5),point(3,5),point(1,3)};
    20     sort(A,A+5,comp);
    21     for(int i=0;i<5;i++){A[i].out();cout<<" ";}
    22 }
    23 
    24 struct edge{
    25     int next,v,w;
    26     edge(int next=0,int v=0,int w=0):next(next),v(v),w(w){}
    27 };
    28 
    29 const int MAXN=105,MAXM=10005;
    30 
    31 int head[MAXN],cnt;
    32 edge e[MAXM*2];
    33 
    34 void init_G(){
    35     cnt=0,memset(head,0,sizeof(head));
    36     memset(e,0,sizeof(e));
    37 }
    38 
    39 void add(int u,int v,int w){
    40     e[++cnt]=edge(head[u],v,w),head[u]=cnt;
    41     e[++cnt]=edge(head[v],u,w),head[v]=cnt;
    42 }
    43 
    44 struct node{
    45     int dis,u;
    46     bool operator<(const node NEXT)const{return dis<NEXT.dis;}
    47     node(int dis=0,int u=0):dis(dis),u(u){} 
    48     //优先队列默认大根堆,要反过来才是小根堆 
    49 };
    50 
    51 int d[MAXN];void init_d(int n){for(int i=1;i<=n;i++)d[i]=1e9;}
    52 typedef pair<int,int> P;
    53 
    54 int dijkstra(int s,int t){
    55     init_d(t);
    56     priority_queue<node>q;//priority_queue<P,vector<P>,greater<P> >q;//第一维度为距离,第二维度为点     
    57     d[s]=0,q.push(node(0,s));//d[s]=0,q.push(make_pair(0,s));
    58     for(int u,v;!q.empty();){
    59         u=q.top().u,q.pop();//u=q.top().second,q.pop();
    60         for(int i=head[u];i;i=e[i].next){
    61             v=e[i].v;
    62             if(d[v]>d[u]+e[i].w) {
    63                 d[v]=d[u]+e[i].w;
    64                 q.push(node(d[v],v));//q.push(make_pair(d[v],v));
    65             }
    66         }
    67         
    68     }
    69     return d[t];
    70 }
    71 
    72 int main(){
    73     for(int n,m;scanf("%d%d",&n,&m),n+m;){
    74         init_G();
    75         for(int i=1,A,B,C;i<=m;i++)cin>>A>>B>>C,add(A,B,C);            
    76         cout<<dijkstra(1,n)<<endl;
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    HDU2149-Public Sale
    分页和多条件查询功能
    hdu 4691 最长的共同前缀 后缀数组 +lcp+rmq
    BZOJ 2588 Count on a tree (COT) 是持久的段树
    windows 设置脚本IP
    hdu 4912 Paths on the tree(树链拆分+贪婪)
    分散式-ubuntu12.04安装hadoop1.2.1
    struts详细解释拦截器
    Codeforces 459E Pashmak and Graph(dp+贪婪)
    C#中的数据格式转换 (未完待更新)
  • 原文地址:https://www.cnblogs.com/JasonCow/p/13829311.html
Copyright © 2011-2022 走看看