牛客模拟赛啊

牛客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\n", 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\n", 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\n",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\n",w[r]);
}

2.货物分组

 

 

 

 

3.地形计算

 

 

 

 

posted @ 2019-11-03 11:15  攒一兜星星*  阅读(167)  评论(0编辑  收藏  举报