社区讨论

求问

P9755[CSP-S 2023] 种树参与者 2已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@mhizs0yg
此快照首次捕获于
2025/11/03 18:23
4 个月前
此快照最后确认于
2025/11/03 18:23
4 个月前
查看原帖
为什么这个用于解决n<=500性质A的暴搜超时了? n=20(样例一)跑了2.2s
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;

struct node{
    int a,b,c;
}s[100005];
const int INF=0x3f3f3f3f3f3f3f3f;
int n;
vector<int> mp[100005];
// map<int,int> vis;
// bool vis[100005];
bitset<100005> vis;
vector<int> pth;
int date=INF;

int sqz(int a,int b){
    if (a%b==0){
        return a/b;
    }
    else{
        return a/b+1;
    }
}
void dfs(int yjg,int u,int ldate){
    if (yjg==n){
        date=min(date,ldate);
        return ;
    }
    if (ldate>date) return ;
    for (int i=0;i<pth.size();i++){
        int sz=pth[i];
        for (int v:mp[sz]){
            if (vis[v]) continue;
            vis[v]=1;
            int lldate=ldate;
            lldate=max(lldate,yjg+sqz(s[v].a,s[v].b));
            pth.push_back(v);
            dfs(yjg+1,v,lldate);
            pth.pop_back();
            vis[v]=0;
        }
    }
}
void slva(){
    for (int i=1;i<=n;i++){
        s[i].b=max(s[i].b,1LL);
    }
    vis[1]=1;
    pth.push_back(1);
    int llldate=sqz(s[1].a,s[1].b);
    dfs(1,1,llldate);
    printf("%lld\n",date);
    return ;
}
// void slvb(){

// }

signed main(){
    // freopen("test.in","r",stdin);
    // freopen("test.out","w",stdout);

    scanf("%lld",&n);
    bool fd=0;
    for (int i=1;i<=n;i++){
        scanf("%lld%lld%lld",&s[i].a,&s[i].b,&s[i].c);
        if (s[i].c!=0){
            fd=1;
        }
    }
    bool fd2=0;
    for (int i=1;i<n;i++){
        int u,v;
        scanf("%lld%lld",&u,&v);
        mp[u].push_back(v);
        mp[v].push_back(u);
        if (v!=u+1) fd2=1;
    }
    // if (fd2==0){
    //     slvb();
    // }
    if (fd==0){
        slva();
    }
    return 0;
}

回复

9 条回复,欢迎继续交流。

正在加载回复...