• POJ 1062 昂贵的聘礼


    中文题题意请看题

    因为数据范围比较小,所以直接枚举等级上届和下届,然后对于在这个等级范围内的人所建的图跑最短路

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    using namespace std;
    const int inf=0x3f3f3f3f;
    const int N=102;
    int s[N][N];
    int dis[N],lev[N],val[N];
    bool vis[N],ok[N];
    int n,m;
    queue<int>q;
    int spfa()
    {
      int ret=inf;
      memset(dis,inf,sizeof(dis));
      dis[1]=0;
      q.push(1);
      while(!q.empty())
        {
          int u=q.front();vis[u]=0;q.pop();
          for(int v=1;v<=n;v++)
        {
          if(!ok[v]||u==v) continue;
          if(dis[v]>dis[u]+s[u][v])
            {
              dis[v]=dis[u]+s[u][v];
              if(!vis[v])q.push(v),vis[v]=1;
            }
        }
        }
      for(int i=1;i<=n;i++) ret=min(ret,dis[i]+val[i]);
      return ret;
    }
    int main()
    {
      scanf("%d%d",&m,&n);
      memset(s,inf,sizeof(s));
      for(int i=1,x;i<=n;i++)
        {
          scanf("%d%d%d",&val[i],&lev[i],&x);
          for(int j=1,v,w;j<=x;j++)
        {
          scanf("%d%d",&v,&w);
          s[i][v]=w;
        }
        }
      int ans=inf;
      for(int i=0;i<=m;i++)
        {
          memset(ok,0,sizeof(ok));
          for(int j=1;j<=n;j++)
        {
          if(lev[j]>=lev[1]-m+i&&lev[j]<=lev[1]+i) ok[j]=true;
        }
          ans=min(ans,spfa());
        }
      printf("%d
    ",ans);
      return 0;
    }
  • 相关阅读:
    BZOJ 1069 最大土地面积
    BZOJ 1059 矩阵游戏
    BZOJ 3570 动物园
    Luogu 3934 Nephren Ruq Insania
    Luogu 3233 [HNOI2014]世界树
    CF613D Kingdom and its Cities
    Luogu 4001 [BJOI2006]狼抓兔子
    Luogu 2824 [HEOI2016/TJOI2016]排序
    POJ 3463 Sightseeing
    Luogu 2495 [SDOI2011]消耗战
  • 原文地址:https://www.cnblogs.com/pigba/p/8989548.html
Copyright © 2020-2023  润新知