zoukankan      html  css  js  c++  java
  • 牛客模拟赛啊

    牛客CSP-S提高组赛前集训营2

    //不管了上线段树,咔咔咔

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
     
    const int N = 4e5 + 9;
    ll n,m,q,Max[N<<2],a[N],tag[N<<2],sum[N<<2];//M维护区间最大值 
     
    void pushup(int u) {
        sum[u] = sum[u << 1] + sum[u << 1 | 1];
        Max[u] = max(Max[u << 1], Max[u << 1 | 1]);
    }
     
    void buildTree(int u, int ul, int ur) {
        if(ul == ur) {
            sum[u] = a[ul];
            return;
        }
        int mid = (ul + ur) >> 1;
        buildTree(u << 1, ul, mid);
        buildTree(u << 1 | 1, mid + 1, ur);
        pushup(u);
    }
     
    void update(int u, int ul, int ur, int mx){
        sum[u] += (long long)(ur - ul + 1) * mx;
        tag[u] += mx;
        Max[u] += mx;
    }
     
    void pushdown(int u, int ul, int ur){
        if(tag[u]){
            int mid = ul + ur >> 1;
            update(u << 1, ul, mid, tag[u]);
            update(u << 1 | 1, mid + 1, ur, tag[u]);
            tag[u] = 0;
        }
    }
     
    void modify(int u, int ul, int ur, int ml, int mr, int mx) {
        if(ul >= ml && ur <= mr) {
            sum[u] += mx * (ur - ul + 1);
            tag[u] += mx;
            Max[u] += mx;
            return;
        }
        pushdown(u, ul, ur);
        int mid = ur + ul >> 1;
        if(ml <= mid)
            modify(u << 1, ul, mid, ml, mr, mx);
        if(mid < mr)
            modify(u << 1 | 1, mid + 1, ur, ml, mr, mx);
        pushup(u);
    }
     
    int main () {
        scanf("%lld%lld%lld", &n, &m, &q);
        for(int i = 1; i <= n; i++) {
            scanf("%lld", &a[i]);
            modify(1, 1, n, i, i, a[i]);
        }
        ll ans = max(sum[1] / m + ((sum[1] % m) != 0), Max[1]);
        printf("%lld
    ", ans);
        while(q--){
            ll id, x;
            scanf("%lld%lld", &id, &x);
            modify(1, 1, n, id, id, x - a[id]);
            a[id] = x;
            ans = max( (sum[1]/m) + ((sum[1]%m)!=0), Max[1]);
            printf("%lld
    ", ans);
        }
        return 0;
    }

     

    //偷得哪位大佬的代码也忘掉了

    #include<bits/stdc++.h>
    #define N 1000005
    #define M 2000005
    using namespace std;
    bool cur1;
    int n,m,K;
    int ans;
    int head[N],id;
    struct edge{
        int to,nxt;
    }E[M<<1];
    inline void add_edge(int a,int b){
        E[++id]=(edge){b,head[a]};
        head[a]=id;
    }
    inline void Rd(int &res){
        char c;res=0;
        while(c=getchar(),c<48);
        do res=(res<<3)+(res<<1)+(c^48);
        while(c=getchar(),c>47);
        return;
    }
    bool mark[N];
    int dep[N];
    int que[N],cnt,sum;
    void dfs(int x,int f,int d){
        dep[x]=d;
        mark[x]=1;
        for(int i=head[x];i;i=E[i].nxt){
            int v=E[i].to;
            if(v==f)continue;
            if(!mark[v])dfs(v,x,d+1);
            else if(dep[v]<dep[x])que[++cnt]=dep[x]-dep[v],sum+=que[cnt]+1;
        }
    }
    void solve(){
        int h=m-sum;
        if(K<=h){
            ans+=K;
            return;
        }
        ans+=h;
        K-=h;
        sort(que+1,que+cnt+1);
        for(int i=cnt;i>=1&&K;i--){
            K--;
            int h=que[i];
            if(K<=h){
                ans+=K;
                return;
            }
            ans+=h;
            K-=h;
        }
    }
    bool cur2;
    int main(){
        Rd(n);Rd(m);Rd(K);
        for(int i=1,a,b;i<=m;i++){
            Rd(a);Rd(b);
            add_edge(a,b);
            add_edge(b,a);
        }
        for(int i=1;i<=n;i++)if(!mark[i]){
            dfs(i,0,1);
            ans++;
        }
        solve();
        printf("%d
    ",ans);
        return 0;
    }

     

    标程呀


    牛客CSP-S提高组赛前集训营3

    1.货物收集

     

     

     

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=1e6+9;
    int a[N],w[N],head[N];
    struct edge{
        int to,nxt,w;
    }e[N<<1];
    int n,W,tot;
    
    void add(int u,int v,int p){
        e[++tot].to=v;
        e[tot].nxt=head[u];
        e[tot].w=p;
        head[u]=tot;
    }
    
    long long s;
    void dfs(int u,int fa,int x){
        for(int i=head[u];i;i=e[i].nxt){
            int v=e[i].to,p=e[i].w;
            if(v==fa) continue;
            if(x>=p){
                s+=a[v];
                dfs(v,u,x);
            }
        }
    }
    
    bool check(int mid){
        s=0;
        dfs(1,0,w[mid]);
        return s>=W;//
    }
    
    int main(){
        scanf("%d%d",&n,&W);
        for(int i=2;i<=n;i++) 
            scanf("%d",&a[i]);
        for(int i=1;i<n;i++){
            int u,v,p;
            scanf("%d%d%d",&u,&v,&p);
            add(u,v,p);
            add(v,u,p);
            w[i]=p;
        }
        sort(w+1,w+n);
        int l=1,r=n-1,mid;
        while(l<r){
            mid=l+r>>1;
            if(check(mid)) r=mid;
            else l=mid+1;
        }
        printf("%d
    ",w[r]);
    }

    2.货物分组

     

     

     

    3.地形计算

     

     

     

     

  • 相关阅读:
    浅谈java中异常处理
    Android四大组件之BroadcastReceiver
    android基本组件 Button
    Android基本组件TextView和EditView
    Unicode,GBK和UTF8
    记一次生产上的紧急修复之后解疑过程
    使用第三方jar时出现的问题
    码农歌单
    创建servlet程序知识点详解---servlet-day12
    创建servlet程序知识点详解---servlet-day07
  • 原文地址:https://www.cnblogs.com/aprincess/p/11785483.html
Copyright © 2011-2022 走看看