zoukankan      html  css  js  c++  java
  • hdu 2992 Hotel booking

    http://acm.hdu.edu.cn/showproblem.php?pid=2992

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <map>
      4 #include <vector>
      5 #include <queue>
      6 #define maxn 200
      7 #include <algorithm>
      8 using namespace std;
      9 
     10 const int inf=0x3fffffff;
     11 
     12 struct node
     13 {
     14     int v,cost;
     15 };
     16 int g[maxn][maxn],a[maxn],dis[20000];
     17 int n,m,k;
     18 map<int,int>q;
     19 vector<node>v[20000];
     20 bool vis[20000];
     21 int que[20000];
     22 
     23 void inti()
     24 {
     25     q.clear();
     26     for(int i=0; i<=n; i++)
     27     {
     28         v[i].clear();
     29     }
     30     for(int i=0; i<=m+2; i++)
     31     {
     32         for(int j=0; j<=m+2; j++)
     33         {
     34             g[i][j]=inf;
     35             if(i==j) g[i][j]=0;
     36         }
     37     }
     38 }
     39 
     40 void spfa(int qr)
     41 {
     42     queue<int>qq;
     43     memset(vis,false,sizeof(vis));
     44     for(int i=1; i<=n; i++) dis[i]=inf;
     45     dis[qr]=0;
     46     qq.push(qr);
     47     vis[qr]=true;
     48     while(!qq.empty())
     49     {
     50         int x=qq.front();
     51         qq.pop();
     52         vis[x]=false;
     53         for(int i=0; i<(int)v[x].size(); i++)
     54         {
     55             int v2=v[x][i].v,cost=v[x][i].cost;
     56             if(dis[v2]>dis[x]+cost)
     57             {
     58                 dis[v2]=dis[x]+cost;
     59                 if(!vis[v2])
     60                 {
     61                     vis[v2]=true;
     62                     qq.push(v2);
     63                 }
     64             }
     65         }
     66     }
     67     for(int i=1; i<=n; i++)
     68     {
     69         if(dis[i]<=600&&q[i]!=0)
     70         {
     71             g[q[qr]][q[i]]=1;
     72         }
     73     }
     74 
     75 }
     76 
     77 void floyd()
     78 {
     79     for(int c=0; c<=m+1; c++)
     80     {
     81         for(int i=0; i<=m+1; i++)
     82         {
     83             for(int j=0; j<=m+1; j++)
     84             {
     85                     g[i][j]=min(g[i][j],g[i][c]+g[c][j]);
     86             }
     87         }
     88     }
     89 }
     90 int main()
     91 {
     92     while(scanf("%d",&n)!=EOF)
     93     {
     94         if(n==0) break;
     95         scanf("%d",&m);
     96         inti();
     97         for(int i=1; i<=m; i++)
     98         {
     99             scanf("%d",&a[i]);
    100             q[a[i]]=i;
    101         }
    102         a[0]=1;
    103         q[1]=0;
    104         a[m+1]=n;
    105         q[n]=m+1;
    106         scanf("%d",&k);
    107         for(int i=0; i<k; i++)
    108         {
    109             int u,v1,cost;
    110             scanf("%d%d%d",&u,&v1,&cost);
    111             node st;
    112             st.v=v1;
    113             st.cost=cost;
    114             node st1;
    115             st1.v=u;
    116             st1.cost=cost;
    117             v[u].push_back(st);
    118             v[v1].push_back(st1);
    119         }
    120         for(int i=0; i<=m; i++)
    121         {
    122             spfa(a[i]);
    123         }
    124         floyd();
    125         if(g[0][m+1]==inf)
    126         {
    127             printf("-1
    ");
    128         }
    129         else
    130             printf("%d
    ",g[0][m+1]-1);
    131     }
    132     return 0;
    133 }
    View Code
  • 相关阅读:
    在线|九月月考选填题
    函数$f(x)=e^xpm e^{-x}$相关
    偶函数性质的推广
    2020年全国卷Ⅱ卷文科数学选填题解析版
    2020年全国卷Ⅱ卷文科数学解答题解析版
    待定系数法
    特殊方法求函数解析式
    phd文献阅读日志-4.1
    phd文献阅读日志-1.2~3.2(1.2,2.1,2.2,3.1,3.2)
    完美解决linux下vim在终端不能用鼠标复制的问题
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3634248.html
Copyright © 2011-2022 走看看