社区讨论
求问
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 条回复,欢迎继续交流。
正在加载回复...