显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+7;
int c[2008][2008],n,q,siz[N],father[N],sum;
char mapp[2008][2008];
void dfs1(int x,int y,int val){
if(x==0||y==0){
return;
}
c[x][y]=val;
sum+=val;
if(mapp[x][y-1]=='R'){
dfs1(x,y-1,val);
}
if(mapp[x-1][y]=='D'){
dfs1(x-1,y,val);
}
return;
}
void dfs2(int x,int y,int val){
if(x==0||y==0){
return;
}
sum-=c[x][y];
c[x][y]=val;
sum+=c[x][y];
if(mapp[x][y-1]=='R'){
dfs2(x,y-1,val);
}
if(mapp[x-1][y]=='D'){
dfs2(x-1,y,val);
}
return;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("zunxun.in","r",stdin);
freopen("zunxun.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
char ch;
cin>>ch;
mapp[i][j]=ch;
}
cin>>c[i][n+1];
}
for(int i=1;i<=n;i++){
cin>>c[n+1][i];
}
for(int i=1;i<=n;i++){
if(mapp[i][n]=='R'){
dfs1(i,n,c[i][n+1]);
}
if(mapp[n][i]=='D'){
dfs1(n,i,c[n+1][i]);
}
}
cout<<sum<<"\n";
cin>>q;
while(q--){
int a,b;
cin>>a>>b;
if(mapp[a][b]=='D'){
mapp[a][b]='R';
sum-=c[a][b];
c[a][b]=c[a][b+1];
sum+=c[a][b];
dfs2(a,b,c[a][b]);
}
else{
mapp[a][b]='D';
sum-=c[a][b];
c[a][b]=c[a+1][b];
sum+=c[a][b];
dfs2(a,b,c[a][b]);
}
cout<<sum<<"\n";
}
return 0;
}