2017-9-28离线赛瞎刷

这一场并没有考,
然后题目还是补掉了的。

T1 special tree

题目大意

一棵单向向下的树,另外每个点有一条到根节点的边。
两种操作:修改某边权以及回答两点间最短距离。

分析

因为这棵树长得十分奇怪,
所以实际上走的路径种数很少。
只有两种方案:
直接从u向下走到v,
从u子树中某个点走到根然后再走到v。
所以只用维护深度和子树内到根的距离。
DFS序求出子树区间。
然后我们用一个普通的延迟更新线段树就能同时弄掉这两个东西。

代码
#include<bits/stdc++.h>
using namespace std;

#define Komachi is retarded
#define REP(i,a,b) for(int i=(a),i##_end_=(b);i<i##_end_;i++)

void Rd(int &res){
    static char c;res=0;
    while((c=getchar())<48);
    do res=(res<<3)+(res<<1)+(c^48);
    while((c=getchar())>47); 
}
#define M 200004
#define LL long long
#define lp (p<<1)
#define rp (p<<1|1)
#define lson l,mid,lp
#define rson mid+1,r,rp
#define INF 0x3f3f3f3f3f3f3f3f
#define chkmin(a,b) a=min(a,b)

struct SegTree{
    LL Mn[M<<2],Dn[M<<2];
    void Down(int p){
        if(Dn[p]){
            Mn[lp]+=Dn[p];
            Mn[rp]+=Dn[p];
            Dn[lp]+=Dn[p];
            Dn[rp]+=Dn[p];
            Dn[p]=0;
        }
    }
    void Updata(int l,int r,int p,int a,int b,LL t){
        if(l>b || r<a)return;
        if(a<=l&&r<=b){Mn[p]+=t,Dn[p]+=t;return;}
        Down(p);
        int mid=l+r>>1;
        Updata(lson,a,b,t);
        Updata(rson,a,b,t);
        Mn[p]=min(Mn[lp],Mn[rp]);
    }
    LL Query(int l,int r,int p,int a,int b){
        if(l>b || r<a)return INF;
        if(a<=l&&r<=b)return Mn[p];
        Down(p);
        int mid=l+r>>1;
        return min(Query(lson,a,b),Query(rson,a,b));
    }
}Tree;
int Next[M],V[M],Head[M],ltot;
void Add_Edge(int a,int b){
    Next[++ltot]=Head[a],V[Head[a]=ltot]=b;
}
#define LREP(i,A) for(int i=Head[A];i;i=Next[i])

int n,q,ReA[M],ReC[M],Re[M];
int A[M],B[M],C[M];
int DFN[M],End[M],dfn;
void DFS(int A){
    int B;
    DFN[A]=++dfn;
    LREP(i,A)
        DFS(B=V[i]);
    End[A]=dfn;
}
int main(){
    Rd(n),Rd(q);
    REP(i,1,n){
        Rd(A[i]),Rd(B[i]),Rd(C[i]);
        Add_Edge(A[i],B[i]);
    }
    REP(i,1,n){
        Rd(ReA[i]),Rd(ReC[i]),Rd(ReC[i]);
        Re[ReA[i]]=ReC[i];
    }
    DFS(1);
    REP(i,1,n) Tree.Updata(1,n,1,DFN[B[i]],End[B[i]],C[i]);
    REP(i,1,n) Tree.Updata(1,n,1,DFN[ReA[i]],DFN[ReA[i]],ReC[i]);
    while(q--){
        int a,b,c;
        Rd(a),Rd(b),Rd(c);
        if(a==1){
            if(b>=n){
                b-=n-1;
                Tree.Updata(1,n,1,DFN[ReA[b]],DFN[ReA[b]],c-ReC[b]);
                ReC[b]=Re[ReA[b]]=c;
            }
            else{
                Tree.Updata(1,n,1,DFN[B[b]],End[B[b]],c-C[b]);
                C[b]=c;
            }
        }
        else {
            LL D1=Tree.Query(1,n,1,DFN[b],DFN[b])-Re[b];
            LL D2=Tree.Query(1,n,1,DFN[c],DFN[c])-Re[c];
            LL Val=Tree.Query(1,n,1,DFN[b],End[b]);
            LL Ans=Val-D1+D2;
            if(DFN[b]<=DFN[c] && DFN[c]<=End[b])chkmin(Ans,D2-D1);
            printf("%lld\n",Ans);
        }
    }
    return 0;
}

T2 div tree

分析
P40

这个40分只需要暴力DP,
然后直接累计一下答案。

P70

此时只要求一个答案。
所以可以把这个数分解质因数然后用贪心来求。

P100

沿用P70的方法,
加一个筛出质因数即可,
因为质因数不会很多所以复杂度不是很大。

代码
#include<bits/stdc++.h>
using namespace std;

#define Komachi is retarded
#define REP(i,a,b) for(int i=(a),i##_end_=(b);i<i##_end_;i++)
#define LLREP(i,a,b) for(LL i=(a),i##_end_=(b);i<i##_end_;i++)
#define LL long long
#define chkmax(a,b) a=max(a,b)

LL A,B;
struct P40{
    static const int M=1000004;
    int DP[M],Deg[M];
    void Solve(){
        DP[1]=1;
        REP(i,2,M)Deg[i]=1;

        REP(i,1,B+1)
            for(int j=i+i;j<=B;j+=i)
                Deg[j]++,chkmax(DP[j],DP[i]+Deg[i]);

        LL Ans=0;
        REP(i,A,B+1)
            Ans+=DP[i]+Deg[i]-1;

        printf("%lld\n",Ans);
    }
}P40;
struct P100{
    static const int M=1000004;
    bool Mark[M];
    LL Num[M];
    vector<int>Deg[M];
    #define pb push_back
    #define SZ(a) ((int)(a).size())
    LL Answer(vector<int>D){
        int Len=SZ(D),v;
        LL Res=0,Sum;
        while(1){
            Sum=D[v=0]+1;
            REP(i,1,Len){
                Sum*=D[i]+1;
                if(D[i]>D[v])v=i;
            }
            if(!D[v])break;
            D[v]--;
            Res+=Sum;
        }
        return Res;
    }
    void Solve(){
        REP(i,0,B-A+1)Num[i]=A+i;
        REP(i,2,M){
            if(!Mark[i]){
                for(int j=i+i;j<M;j+=i)Mark[j]=1;
                LL Pos=B/i*i-A;
                while(Pos>=0){
                    int Res=0;
                    while(!(Num[Pos]%i))
                        Res++,Num[Pos]/=i;
                    Deg[Pos].pb(Res);
                    Pos-=i;
                }
            }
        }
        REP(i,0,B-A+1)if(Num[i]!=1)Deg[i].pb(1);
        LL Ans=0;
        REP(i,0,B-A+1)
            Ans+=Answer(Deg[i]);
        printf("%lld\n",Ans);
    }
}P100;
int main(){
    scanf("%lld %lld",&A,&B);
    if(B<=1000000)P40.Solve();
    else P100.Solve();
    return 0;
}

T3 skt

暂略

### 回答1: 您可以在Element官网上下载element-ui2.15.9的离线资源包。具体步骤如下: 1. 打开Element官网:https://element.eleme.cn/ 2. 点击文档下方的“下载”按钮。 3. 在下载页面找到“离线包”一栏,选择您需要的版本(例如2.15.9)并下载。 4. 解压下载的离线包,即可使用Element UI的离线资源。 ### 回答2: Element-UI 是一套基于 Vue.js 的桌面端组件库,可以帮助开发者快速构建优雅的用户界面。离线资源是指将 Element-UI 的相关文件下载至本地,不需要依赖于网络即可使用。 Element-UI 2.15.9 版本的离线资源可以通过官方网站或者 GitHub 下载获取。离线资源包括了 Element-UI 的样式文件、JavaScript 文件以及字体文件等。通过下载离线资源,可以确保在开发和部署时不依赖于网络,提高项目的稳定性和可靠性。 使用离线资源首先需要将下载的文件解压到项目的目录中,然后在项目中引入对应的文件。根据项目的需求,可以选择只引入需要的模块,而无需引入整个 Element-UI 库,可以有效减小项目的体积。 离线资源的好处在于,可以在没有网络连接的环境下进行开发和调试。无需担心网络延迟和不稳定性带来的影响,可以更加高效地开发和测试项目。 此外,离线资源还可以用于部署到生产环境中。通过使用离线资源,可以避免在生产环境中依赖于外部网络资源,提高项目的运行稳定性和安全性。 综上所述,Element-UI 2.15.9 的离线资源是一种方便开发者使用的方式,可以在离线环境下开发和部署项目,提高项目的稳定性和可靠性。 ### 回答3: Element-ui 2.15.9离线资源是指Element-ui框架的离线版本,可以在不联网的情况下使用。 Element-ui是一套基于Vue.js的开源UI框架,它提供了丰富的组件和工具,可以帮助开发者快速构建漂亮、交互友好的Web界面。 离线资源可以直接下载到本地,不需要依赖网络,可以在没有网络连接的环境中使用。这对于一些需要在没有网络条件下开发或者部署的项目来说非常有用。 Element-ui 2.15.9离线资源一般以ZIP压缩包的形式提供,包含了所有的源码、样式文件、字体文件、图片等资源。使用离线资源,我们可以根据自己的需求进行定制,选择需要的组件和样式,从而减小项目的体积,提高加载速度。 使用离线资源需要进行以下步骤: 1. 下载离线资源压缩包,解压到指定的目录。 2. 在项目中引入相应的CSS文件和JS文件,这样就可以使用Element-ui的组件和样式了。 3. 根据官方文档或示例代码,进行相应的组件使用和定制。 值得注意的是,离线资源不支持在线更新和维护,如果需要使用最新版本的Element-ui,还需要手动下载更新离线资源。同时,离线资源也不能享受到在线时可以从CDN加载资源的优势。 总之,Element-ui 2.15.9离线资源是一种方便离线开发和部署的选择,可以在没有网络的情况下使用。使用离线资源可以加快项目的加载速度,并且方便进行定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值