zoukankan      html  css  js  c++  java
  • GDKOI2021 PJ D2 总结

    我错惹,现在是总结了QWQ

    与 T4 数据搏斗了一晚上终于找到时间写了。

    T1 math

    我炸了……

    我连小学水平都没有。

    代码已经钉上耻辱柱了所以没有。

    T2 tree

    很水,然后我的代码被反复吊起来锤,然后我就只能告诉他们这个东西能跑前提是输入数据必须满足题意。

    #include<cstdio>
    using namespace std;
    int t,n,d[100010][3];
    char BuF[1<<26],*InF=BuF;
    template<typename T>void read(T &x){
        for(;*InF<33;++InF);
        for(x=0;47<*InF&&*InF<58;x=(x<<3)+(x<<1)+(*InF++^48));
    }
    int main(){
        freopen("tree.in","r",stdin);
        freopen("tree.out","w",stdout);
        fread(BuF,1,1<<26,stdin);
        for(read(t);t;--t){
            bool ans=1,tmp=1;
            read(n);
            for(int i=0;i<n;++i){
                read(d[i][0]);
            }
            d[0][1]=0;d[0][2]=n+1;
            for(int l=0,r=0;l<=r;++l){
                if(d[l][1]<d[r+1][0]&&d[r+1][0]<d[l][0]){
                    ++r;
                    d[r][1]=d[l][1];
                    d[r][2]=d[l][0];
                    tmp^=1;
                }
                if(d[l][2]>d[r+1][0]&&d[r+1][0]>d[l][0]){
                    ++r;
                    d[r][1]=d[l][0];
                    d[r][2]=d[l][2];
                    tmp^=1;
                }
                ans&=tmp;
            }
            printf(ans?"YES
    ":"NO
    ");
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    

    T3 minecraft

    题目有意思,但是很离谱。

    是个人都知道地狱的距离在奇怪的地形下并没有屁用,只有长期档才会有地狱交通这种东西。

    这就跟100的数据没人写倍增一个道理

    然后就是倍增,然后炸了。

    然后把转移删去两个就过了。

    以下代码正解。

    #include<cstdio>
    #include<iostream>
    #define N 600010
    #define ll long long
    using namespace std;
    int n,q,a[N],b[N<<1][3],dp[N],last,st[N],size,i[N],mx[N];
    ll pt[N];
    bool vis[N]; 
    struct patop{
        ll d[4];
        int p;
        patop(){
            d[0]=d[1]=d[2]=d[3]=p=0;
        }
        patop operator+(patop b){
            patop re;
            re.p=b.p;
            re.d[0]=min(d[0]+b.d[0],d[1]+b.d[2]);
            re.d[1]=min(d[1]+b.d[3],d[0]+b.d[1]);
            re.d[2]=min(d[2]+b.d[0],d[3]+b.d[2]);
            re.d[3]=min(d[3]+b.d[3],d[2]+b.d[1]);
            return(p?re:b);
        }
    }s[N][21];
    char BuF[1<<26],*InF=BuF;
    template<typename T>void read(T &x){
        for(;*InF<33;++InF);
        for(x=0;47<*InF&&*InF<58;x=(x<<3)+(x<<1)+(*InF++^48));
    }
    void add(int x,int y,int z){
        b[++last][0]=a[x];
        b[a[x]=last][1]=y;
        b[last][2]=z;
    }
    void dfs(){
        for(st[size=1]=1;size;){
            register int m=st[size],&im=i[st[size]];
            vis[m]=1;
            if(!im){
                dp[m]=dp[s[m][0].p]+1;
                for(mx[x]=1;s[m][mx[x]-1].p;++i){
                    s[m][mx[x]]=s[m][mx[x]-1]+s[s[m][mx[x]-1].p][mx[x]-1];
                }
                im=a[m];
            }else{
                im=b[im][0];
            }
            for(;im&&b[im][1]==s[m][0].p;im=b[im][0]);
            if(im){
                s[b[im][1]][0].p=m;
                s[b[im][1]][0].d[0]=b[im][2]<<3;
                s[b[im][1]][0].d[1]=min(pt[b[im][1]]+b[im][2],(b[im][2]<<3)+pt[m]);
                s[b[im][1]][0].d[2]=min(pt[b[im][1]]+(b[im][2]<<3),b[im][2]+pt[m]);
                s[b[im][1]][0].d[3]=b[im][2];
                st[++size]=b[im][1];
            }else{
                size--;
            }
        }
    }
    ll lca(int x,int y){
        patop a,b;
        if(dp[x]<dp[y]){
            swap(x,y);
        }
        for(register int i=mx[x];dp[x]>dp[y];--i){
            if(dp[s[x][i].p]>=dp[y]){
                a=a+s[x][i];
                x=s[x][i].p;
            }
        }
        for(register int i=mx[x];i>=0;--i){
            if(s[x][i].p!=s[y][i].p){
                a=a+s[x][i];
                x=s[x][i].p;
                b=b+s[y][i];
                y=s[y][i].p;
            }
        }
        if(x!=y){
            a=a+s[x][0];
            b=b+s[y][0];
        }
        return(min(a.d[0]+b.d[0],min(a.d[1]+(b.d[1]?b.d[1]:pt[a.p]),min(a.d[0]+b.d[1],a.d[1]+b.d[0])+pt[a.p])));
    }
    int main(){
        freopen("minecraft5.in","r",stdin);
        freopen("minecraft.out","w",stdout);
        fread(BuF,1,1<<26,stdin);
        read(n);
        for(register int i=1;i<=n;++i){
            read(pt[i]);
        }
        for(register int i=1,x,y,z;i<n;++i){
            read(x);read(y);read(z);
            add(x,y,z);
            add(y,x,z);
        }
        dfs();
        for(register int i=1;i<=n;i++){
            if(!vis[i]){
                printf("%d
    ",i);
            }
        }
        read(q);
        for(register int i=1,x,y;i<=q;++i){
            read(x);read(y);
            printf("%lld
    ",lca(x,y));
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    
    

    T4 matrix

    讲题时点名的那个该不会是我……

    反正我是写的网络流。

    然后被拉去造民间(?)数据,然后锅了,然后又锅了……

    然后一晚上就过了。

    这辈子再不想造数据

    #include<cstring>
    #include<iostream>
    #define N 1010
    #define TT 2020
    #define INF 0x7f7f7f7f
    using namespace std;
    int n,a[N][N],b[N][N],r[TT+1],cur[TT+1],w[TT+1],d[TT+1];
    struct CFS{
        int h[TT+1],b[N*N<<3][3],last;
        CFS(){
            last=-1;
        }
        void add(int x,int y,int z){
            b[++last][0]=h[x];
            b[h[x]=last][1]=y;
            b[last][2]=z;
        }
    }h;
    bool p[N][N];
    char BuF[1<<26],*InF=BuF;
    template<typename T>void read(T &x){
        for(;*InF<33;++InF);
        for(x=0;47<*InF&&*InF<58;x=(x<<3)+(x<<1)+(*InF++^48));
    }
    bool bfs(){
        memset(w,127,sizeof(w));
        w[0]=0;
        for(int l=1,r=1;l<=r;++l){
            cur[d[l]]=h.h[d[l]];
            for(int j=h.h[d[l]];j>=0;j=h.b[j][0]){
                if(h.b[j][2]&&w[h.b[j][1]]==INF){
                    w[h.b[j][1]]=w[d[l]]+1;
                    d[++r]=h.b[j][1];
                }
            }
        }
        return(w[TT]<INF);
    }
    int dfs(int x,int flow){
        if(x==TT){
            return(flow);
        }
        int used=0,aflow;
        for(;cur[x]>=0;cur[x]=h.b[cur[x]][0]){
            if(h.b[cur[x]][2]&&w[h.b[cur[x]][1]]==w[x]+1){
                if((aflow=dfs(h.b[cur[x]][1],min(flow-used,h.b[cur[x]][2])))){
                    h.b[cur[x]][2]-=aflow;
                    h.b[cur[x]^1][2]+=aflow;
                    if((used+=aflow)==flow){
                        return(used);
                    }
                }else{
                    w[h.b[cur[x]][1]]=INF;
                }
            }
        }
        return(used);
    }
    void dinic(){
        while(bfs()){
            dfs(0,INF);
        }
    }
    int main(){
        fread(BuF,1,1<<26,stdin);
        memset(h.h,-1,sizeof(h.h));
        read(n);
        for(int i=1;i<=n;++i){
            for(int j=1;j<=n;++j){
                read(a[i][j]);
                b[i][j]=a[i][j]>>1;
                if(a[i][j]&1){
                    h.add(i,j+N,1);
                    h.add(j+N,i,0);
                    ++r[i];
                    ++r[j+N];
                }
            }
        }
        for(int i=1;i<=n;++i){
            h.add(0,i,r[i]>>1);
            h.add(i,0,0);
            h.add(i+N,TT,r[i+N]>>1);
            h.add(TT,i+N,0);
        }
        dinic();
        for(int i=1;i<=n;++i){
            for(int j=h.h[i];j>=0;j=h.b[j][0]){
                if(h.b[j][1]>N&&h.b[j][1]!=TT){
                    b[i][h.b[j][1]-N]+=h.b[j^1][2];
                }
            }
        }
        for(int i=1;i<=n;++i){
            for(int j=1;j<=n;++j){
                printf("%d ",b[i][j]);
            }
            putchar('
    ');
        }
        for(int i=1;i<=n;++i){
            for(int j=1;j<=n;++j){
                printf("%d ",a[i][j]-b[i][j]);
            }
            putchar('
    ');
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    
  • 相关阅读:
    ogre terrain
    error list
    Basic Turtorial 3( Ogre wiki)
    操作 Wave 文件(3): 接触 mmio 系列函数
    操作 Wave 文件(5): 获取 Wave 文件的格式信息
    操作 Wave 文件(6): 获取 Wave 文件的波形数据
    关于动态数组指针操作的两个例子
    操作 Wave 文件(7): 建立一个空的 Wave 文件(三种方法)
    操作 Wave 文件(8): 使用 TMediaPlayer 录制 wav 文件
    操作 Wave 文件(10): 输入输出设备与格式支持
  • 原文地址:https://www.cnblogs.com/groundwater/p/14337347.html
Copyright © 2011-2022 走看看