记录编号 607069 评测结果 AAAAAAAAAATTTTT
题目名称 3863.[USACO23 Jan Silver] Following Directions 最终得分 67
用户昵称 Gravatar彭欣越 是否通过 未通过
代码语言 C++ 运行时间 15.308 s
提交时间 2025-10-05 14:46:56 内存使用 9.81 MiB
显示代码纯文本
#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;
}