解释SF:segmentation fault的意思,常见原因如数组访问越界
代码如下,SF的地方是在主函数建边那里
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct Node{
bool vis;
int b,c;
long long a,h;
vector<int> nxt;
}node[100002];
int n,ans=1e9;
void solve(int dep){
if(dep>=ans) return;
for(int i=1;i<=n;i++){
if(node[i].vis) node[i].h+=max(node[i].b+node[i].c*dep,1);
}
if(dep>=n){
bool x=true;
for(int i=1;i<=n;i++){
if(node[i].h<node[i].a){
x=false;
break;
}
}
if(x) ans=min(ans,dep);
else solve(dep+1);
return;
}
else{
for(int i=1;i<=n;i++){
if(node[i].vis) continue;
int len=node[i].nxt.size();
for(int j=0;j<len;j++){
if(!node[node[i].nxt[j]].vis) continue;
node[i].vis=true;
solve(dep+1);
node[i].h=0;
node[i].vis=false;
}
}
}
}
int main(){
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld%d%d",&node[i].a,&node[i].b,&node[i].c);
node[i].h=0;
node[i].vis=false;
node[i].nxt1=0;
node[i].nxt2=0;
}
for(int i=1;i<n;i++){
int u,v;
node[u].nxt.push_back(v);
node[v].nxt.push_back(u);
}
printf("%d",ans);
return 0;
}
注:如发现CE的情况,是我现场把代码改回SF版本的时候出的问题,因为我见到SF后找不到原因就注释了那段代码重写了特殊情况B/C的,结束公示代码了才改回SF版本让谷友找bug的()