题解:CF2027C Add Zeros
记忆化搜索 + 图论建模
由于每次操作后是对序列的末尾插入
也就是说我们只需要考虑一开始数组中存在的下标
对于题目的
当按照上述规则进行建图后,再从
由于
同时搜索需要记忆化,否则会 TLE。
代码如下:
#define rep(x,y,z) for(int x=y;x<=z;x++)
typedef long long LL;
const int N=3e5+5;
int n;
LL a[N];
map<LL,bool> vis;
map<LL,vector<LL>> E;
LL ans;
void dfs(LL u){
vis[u]=1;
ans=max(ans,u);
for(auto v:E[u]){
if(vis[v]) continue;
dfs(v);
}
}
void solve(){
vis.clear();
E.clear();
cin>>n;
rep(i,1,n) cin>>a[i];
rep(i,1,n){
LL u=a[i]+i-1;
LL v=u+i-1;
E[u].push_back(v);
}
ans=0;
dfs(n);
cout<<ans;
}