显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1510;
int a[N][N],mk[N][N];
int n,q;
ll ans;
string s[N];
struct node {
int x,y;
}f[N][N];
void dfs (int x,int y,int sum) {
if (x<=0||y<=0) return;
a[x][y]=sum;
ans+=sum;
if (y>1&&s[x][y-2]=='R') {
dfs(x,y-1,sum);
}
if (x>1&&s[x-1][y-1]=='D') {
dfs(x-1,y,sum);
}
}
void dfs1 (int x,int y,int sum) {
if (x<=0||y<=0) return;
ans-=a[x][y];
a[x][y]=sum;
ans+=a[x][y];
if (y>1&&s[x][y-2]=='R') {
dfs1(x,y-1,sum);
}
if (x>1&&s[x-1][y-1]=='D') {
dfs1(x-1,y,sum);
}
}
int main () {
freopen("zunxun.in","r",stdin);
freopen("zunxun.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n;
for (int i=1;i<=n;i++) {
cin >> s[i];
cin >> a[i][n+1];
}
for (int i=1;i<=n;i++) cin >> a[n+1][i];
for (int i=1;i<=n;i++) {
if (s[i][n-1]=='R') dfs(i,n,a[i][n+1]);
if (s[n][i-1]=='D') dfs(n,i,a[n+1][i]);
//cout << sum <<endl;
}
cout << ans <<endl;
cin >> q;
while (q--) {
int x,y;
cin >> x >> y;
if (s[x][y-1]=='R') {
s[x][y-1]='D';
ans-=a[x][y];
a[x][y]=a[x+1][y];
ans+=a[x][y];
dfs1(x,y,a[x][y]);
}else{
s[x][y-1]='R';
ans-=a[x][y];
a[x][y]=a[x][y+1];
ans+=a[x][y];
dfs1(x,y,a[x][y]);
}
cout << ans <<endl;
}
return 0;
}