P1266 速度限制

Posted $mathcal{Lance1ot}$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1266 速度限制相关的知识,希望对你有一定的参考价值。

P1266 速度限制


第一次接触这种分层spfa

类似于dp 个人理解

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue> 
using namespace std;
struct node
{
    int p;
    int v;
    int l;
    int x;
};
struct que
{
    int p;
    int v;
};
queue<que>q;
node l[100000];
int h[501],t;
int pp[500][510],pv[500][510];
bool vis[500][510];
double map[500][510];
void add(int a,int b,int c,int d)
{
    l[++t].p=b;
    l[t].v=c;
    l[t].l=d;
    l[t].x=h[a];
    h[a]=t;
}
void print(int a,int b)
{
    if(a!=1)
        print(pp[a][b],pv[a][b]);
    printf("%d ",a-1);
}
int main()
{
    int n,m,end;
    scanf("%d%d%d",&n,&m,&end);
    end+=1;
    int a,b,c,d;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d%d",&a,&b,&c,&d);
        a+=1;
        b+=1;
        add(a,b,c,d);
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=510;j++)
            map[i][j]=0x7ffffff;
    vis[1][70]=true;
    map[1][70]=0;
    que pa,net;
    pa.p=1;
    pa.v=70;
    q.push(pa);
    while(!q.empty())
    {
        pa=q.front();
        q.pop();
        vis[pa.p][pa.v]=false;
        for(int i=h[pa.p];i;i=l[i].x)
        {
            if(l[i].v==0)
            {
                if(map[l[i].p][pa.v]>1.0*map[pa.p][pa.v]+1.0*l[i].l/pa.v)
                {
                    map[l[i].p][pa.v]=1.0*map[pa.p][pa.v]+1.0*l[i].l/pa.v;
                    pp[l[i].p][pa.v]=pa.p;
                    pv[l[i].p][pa.v]=pa.v;
                    if(!vis[l[i].p][pa.v])
                    {
                        vis[l[i].p][pa.v]=true;
                        net.p=l[i].p;
                        net.v=pa.v;
                        q.push(net);
                    }
                }
            }
            else
            {
                if(map[l[i].p][l[i].v]>1.0*map[pa.p][pa.v]+1.0*l[i].l/l[i].v)
                {
                    map[l[i].p][l[i].v]=1.0*map[pa.p][pa.v]+1.0*l[i].l/l[i].v;
                    pp[l[i].p][l[i].v]=pa.p;
                    pv[l[i].p][l[i].v]=pa.v;
                    if(!vis[l[i].p][l[i].v])
                    {
                        vis[l[i].p][l[i].v]=true;
                        net.p=l[i].p;
                        net.v=l[i].v;
                        q.push(net);
                    }
                }
            }
        }
    }
    double minn=0x7ffffff;
    for(int i=1;i<=500;i++)
        if(minn>map[end][i])
        {
            minn=map[end][i];
            a=pp[end][i];
            b=pv[end][i];
        }
    print(a,b);
    printf("%d",end-1);
}

以上是关于P1266 速度限制的主要内容,如果未能解决你的问题,请参考以下文章

P1266 速度限制(分层图spfa)

洛谷 P1266 速度限制

jQuery 平滑滚动片段以不同的速度工作

3.资源限制

如何限制 HTML 页面的加载速度?

十个html5代码片段,超实用,一定要收藏