POJ 1062 Expensive bride price

Please refer to the title for the meaning of the title in Chinese

Because the data range is relatively small, the previous and next grades are directly enumerated, and then the shortest path is run for the graphs created by people within this grade range.

#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;
}
intmain ()
{
  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;
    }
      years = min(years,spfa());
    }
  printf("%d\n",ans);
  return 0;
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325343474&siteId=291194637