• poj 1062 昂贵的聘礼 最短路


              中文题 题意就不说了,注意题目里说的是所有的人等级差不能超过一个值,而不是两个两个之间不能超过(这里题意搞错了wa半天),

     建好图,枚举可以在这个最短路里的最高级和最低级再跑最短路 得到最小值就可以了。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 #define INF 99999999
     7 struct node{int price,rank1;}p[1002];
     8 int g[102][102],d[102];
     9 bool vis[102];
    10 
    11 int dij(int s,int n,int min1,int max1)
    12 {
    13     int minn,mini;
    14     for(int i=1;i<=n;i++)
    15         d[i]=INF;
    16     memset(vis,false,sizeof(vis));
    17     d[s]=0;
    18     for(int k=1;k<n;k++)
    19     {
    20         minn=INF;
    21         for(int i=1;i<=n;i++)
    22             if(!vis[i]&&d[i]<minn)
    23             {
    24                 minn=d[i];
    25                 mini=i;
    26             }
    27         vis[mini]=true;
    28         for(int i=1;i<=n;i++)
    29             if(p[i].rank1>=min1&&p[i].rank1<=max1&&d[mini]+g[mini][i]<d[i])
    30                 d[i]=d[mini]+g[mini][i];
    31     }
    32     minn=INF;
    33     for(int i=1;i<=n;i++)
    34     {
    35         d[i]+=p[i].price;
    36         if(minn>d[i])
    37             minn=d[i];
    38     }
    39     return minn;
    40 }
    41 
    42 int main()
    43 {
    44     int n,k,c,a,b;
    45     while(~scanf("%d%d",&c,&n))
    46     {
    47         for(int i=0;i<=n;i++)
    48             for(int j=0;j<=n;j++)
    49                g[i][j]=INF;
    50         for(int i=1;i<=n;i++)
    51         {
    52            scanf("%d%d%d",&p[i].price,&p[i].rank1,&k);
    53            while(k--)
    54            {
    55                scanf("%d%d",&a,&b);
    56                g[i][a]=min(b,g[i][a]);
    57            }
    58         }
    59         int temp,ans=INF;
    60         temp=p[1].rank1;
    61         temp=max(p[1].rank1-c,0);
    62         for(int i=temp;i<=p[1].rank1;i++)
    63         {
    64             int pp;
    65             pp=dij(1,n,i,i+c);
    66             if(pp<ans)
    67                 ans=pp;
    68         }
    69         printf("%d
    ",ans);
    70     }
    71 }
  • 相关阅读:
    数据结构--树链剖分准备之LCA
    FancyBox的使用技巧 (汇总)
    轮播效果汇总
    媒体查询
    网页效果总结
    sublime使用技巧总结
    js面向对象
    【STL】牛客练习赛16 F-选值 (手写二分应该也能过)
    【数论】【HDU 2048】神、上帝以及老天爷 【错排公式】
    【STL】【HDU2024】C语言合法标识符【水题】
  • 原文地址:https://www.cnblogs.com/assult/p/3915533.html
Copyright © 2020-2023  润新知