zoukankan      html  css  js  c++  java
  • 【11.4 测试】Dash Speed

    【题目描述】

    比特山是比特镇的飙车圣地。在比特山上一共有n个广场,编号依次为1到n,这些广场之间通过n1条双向车道直接或间接地连接在一起,形成了一棵树的结构。

    因为每条车道的修建时间以及建筑材料都不尽相同,所以可以用两个数字li;ri量化地表示一条车道的承受区间,只有当汽车以不小于li且不大于ri的速度经过这条车道时,才不会对路面造成伤害。

    Byteasar最近新买了一辆跑车,他想在比特山飙一次车。Byteasar计划选择两个不同的点S;T,然后在它们树上的最短路径上行驶,且不对上面任意一条车道造成伤害。

    Byteasar不喜欢改变速度,所以他会告诉你他的车速。为了挑选出最合适的车速,Byteasar一共会向你询问m次。请帮助他找到一条合法的道路,使得路径上经过的车道数尽可能多。

    【输入格式】

    从文件speed.in中读入数据。

    第一行包含两个正整数n;m,表示广场的总数和询问的总数。

    接下来n1行,每行四个正整数ui;vi;li;ri,表示一条连接ui和vi的双向车道,且承受区间为[li;ri]。

    接下来m行,每行一个整数qi,分别表示每个询问的车速。

    【输出格式】

    输出到文件speed.out中。

    输出m行,每行一个整数,其中第i行输出车速为qi时的最长路径的长度,如果找不到合法的路径则输出0。

    【样例输入】
    53

    3224

    1525

    4522

    1235

    1

    2

    3


    【样例输出】

    0

    2

    3

    题解:祭上我的20分dfs代码。其他的实在打不出来%%%

             (伸懒腰,舒服!)

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<queue>
    using namespace std;
    int n,m,vis[66],ans;
    int head[66],cnt,x,y,ll,rr;
    struct node{
        int to,next,l,r,flag;
    }e[66];
    
    void add(int x,int y,int ll,int rr){
        e[++cnt].to=y; e[cnt].r=rr; e[cnt].l=ll; 
        e[cnt].next=head[x]; head[x]=cnt;
    }
    
    void dfs(int sum,int now){
        ans=max(ans,sum);
        for(int i=head[now];i;i=e[i].next){
            if(vis[e[i].to]==0 && e[i].flag==1){
                vis[e[i].to]=1;
                dfs(sum+1,e[i].to); //vis[e[i].to]=0;
            }
        }
    }
    
    int main(){
        freopen("speed.in","r",stdin);
        freopen("speed.out","w",stdout);
        scanf("%d %d",&n,&m);
        for(int i=1;i<n;i++){
            scanf("%d %d %d %d",&x,&y,&ll,&rr); 
            add(x,y,ll,rr); add(y,x,ll,rr);
        }
        //cout<<cnt;
        while(m--){
            scanf("%d",&x); ans=0;
            for(int i=1;i<=cnt;i++)
                if(x>=e[i].l && x<=e[i].r) e[i].flag=1;
                else e[i].flag=0;
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++) dfs(0,i); 
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Javascript 生成全局唯一标识符 (GUID,UUID)
    nginx 与location语法详解
    nginx的安装与使用
    Linux上python3的安装和使用
    Linux上Redis安装和简单操作
    MySQL + centos +主从复制
    web服务基础
    linux系统基础优化及高级操作命令
    vim编辑
    Linux的基本命令
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11793227.html
Copyright © 2011-2022 走看看