zoukankan      html  css  js  c++  java
  • 2021天梯赛

    l3-2

    暴力预处理 30分写法

    #include<bits/stdc++.h>
    #define inf 0x3f3f3f
    #define ll long long 
    using namespace std;
    const ll N=1e5+7;
    ll n,a[N],ans[N],pos,m,maxx;
    vector<ll>v[N];
    vector<ll>jk[N];
    struct node{
        ll len;
        ll a[N];
    }k[105]; 
    int flag=0;
    int judge(int i,int j){//块编号 当前位置 
        if(k[i].len+j-1>n)    return 0;
        for(int z=1;z<=k[i].len;++z){
            if(k[i].a[z]!=a[j+z-1])    return 0;
        }
        return 1;
    }
    void dfs(int i){
        if(flag==1){
            return ;
        }
        if(i==n){
            flag=1;
            cout<<ans[1];
            for(int i=2;i<=pos;++i){
                cout<<" "<<ans[i];
            }
            return ;
        }
        for(int j=0;j<jk[i].size();++j){
            ans[++pos]=jk[i][j];
            dfs(i+k[jk[i][j]].len-1);
            ans[pos--]=0;
        }
    }
    int main(){
        scanf("%lld",&n);
        for(int i=1;i<=n;++i){
            scanf("%lld",&a[i]);
            v[a[i]].push_back(i);
        }
        scanf("%lld",&m);
        for(int i=1;i<=m;++i){
            scanf("%lld",&k[i].len);
            for(int j=1;j<=k[i].len;++j){
                scanf("%lld",&k[i].a[j]);
            }
            for(int j=1;j<=n;++j){
                if(judge(i,j)){
                    jk[j].push_back(i);
                }
            }
        }
        dfs(1);
        return 0;
    } 

    树里dfs最长链

    注意这种写法很容易被卡。。。。

    但是天梯真的好水

    #include<bits/stdc++.h>
    #define inf 0x3f3f3f
    #define ll long long 
    using namespace std;
    const ll N=1e4+7;
    ll maxx=0,n,x,q,d[N];
    vector<ll>G[N];
    int now[N],pos=0,ans[N];
    
    void dfs(int x,int sum){
        now[++pos]=x;
        for(int j=0;j<G[x].size();++j){
            int to=G[x][j];
            dfs(to,sum+1);
        }
        if(sum>maxx){
            maxx=sum;
            for(int i=1;i<=maxx;++i){
                ans[i]=now[i];
            }
        }
        now[pos--]=-1;
    }
    int main(){
        cin>>n;
        for(int i=0;i<n;++i){
            cin>>x;
            while(x--){
                cin>>q;
                G[i].push_back(q);
                d[q]++;
            }
            sort(G[i].begin(),G[i].end());
        }
        for(int i=0;i<n;++i){
            if(d[i]==0){
                dfs(i,1);
            }
        }
        cout<<maxx<<"
    ";
        cout<<ans[1];
        for(int i=2;i<=maxx;++i){
            cout<<" "<<ans[i];
        }
        return 0;
    } 
  • 相关阅读:
    Air-WIFI使用方法
    libeasy代码学习:一次简单的TCP请求处理流程
    log_pipe日志收集分析系统介绍
    asp.net 项目在 IE 11 下出现 “__doPostBack”未定义 的解决办法
    用命令行实现“一键休眠”
    C#几个经常用到的字符串的截取
    MYSQL存储过程怎么写
    如何用myeclipse和eclipse搭建安卓开发环境
    C#随机生成不重复字符串
    Inno setup 简单打包教程
  • 原文地址:https://www.cnblogs.com/PdrEam/p/14709713.html
Copyright © 2011-2022 走看看