DFS。
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200 + 5;
typedef long long ll;
const ll INF = 0x3f3f3f3f3f3f3f3f;
typedef struct Line{
int k;
int connect[MAXN];
void init(){
k = 0;
}
bool exist(int x){
for(int i = 0; i < k; i++)
if(connect[i] == x) return true;
return false;
}
}Line;
int n, vis[MAXN], link[MAXN];
ll p[MAXN], pre[MAXN];
Line g[MAXN];
ll dfs(int cur){
vis[cur] = 1;
ll res = p[cur];
for(int i = 0; i < g[cur].k; i++){
int v = g[cur].connect[i];
if(vis[v]) continue;
res += dfs(v);
}
return res;
}
int main(void)
{
while(~scanf("%d", &n)){
for(int i = 1; i <= n; i++) scanf("%lld", &p[i]), g[i].init(), link[i] = i;
int k;
scanf("%d", &k);
while(k--){
int opera;
scanf("%d", &opera);
if(!opera){
int pos;
ll d;
scanf("%d%lld", &pos, &d);
link[pos] = ++n;
p[n] = d;
g[n].init();
}
else{
int pos, u, v;
scanf("%d%d%d", &pos, &u, &v);
pos = link[pos];
for(int i = u; i <= v; i++){
int tag = link[i];
if(g[pos].exist(tag)) continue;
g[pos].connect[g[pos].k++] = tag;
}
}
}
ll ans = INF;
for(int i = 1; i <= n; i++){
memset(vis, 0, sizeof(vis));
ans = min(ans, dfs(i));
}
printf("%lld\n", ans);
}
return 0;
}