【题目背景】
『为什么会变成这样呢……第一次有了喜欢的人。有了能做一辈子朋友的人。两件快
乐事情重合在一起。而这两份快乐,又给我带来更多的快乐。得到的,本该是像梦境一般
幸福的时间……但是,为什么,会变成这样呢……』
【题目描述】
给出一个 n × n 的网格图,我们称第 i 行的第 j 个格子为 (i, j),其信息用 vi,j 描述,
每个格子要么是障碍(用 vi,j = −1 表示),要么写着一个正整数 vi,j。
我们称位置 (a, b) 能到达位置 (c, d) 当且仅当:
• (a,b)≠(c,d)。
• va,b≠−1,vc,d≠−1,即两个格子都不是障碍。
•∃(p0,q0),(p1,q1),...,(pk,qk),s.t.(p0,qp)=(a,b),(pk,qk)=(c,d),∀(pi,qi),vpi,qi≠−1,∀0≤i<k,pi≤pi+1,qi≤qi+1,pi+1+qi+1−pi−qi=1,即 (a, b) 可以通过若
干次移动到右边或下边的非障碍格子到达 (c, d)。
请对于所有 (a, b) 能到达 (c, d),求出va,b·vc,d 的和。
【输入格式】
从文件 reach.in 读入。
第一行一个正整数 n。
接下来 n 行,每行 n 个整数,第 i 行的第 j 个整数表示 v_{i,j}。
【输出格式】
输出到文件 reach.out。
输出一行一个非负整数,表示答案。
【样例输入 1】
3 1 1 1 1 ‐1 1 ‐1 1 1【样例输出 1】
12【样例输入 2】
5 1 5 5 2 2 2 2 ‐1 1 4 5 ‐1 3 ‐1 1 5 2 4 5 2 2 2 ‐1 1 2【样例输出 2】
742【样例输入 3】 见 reach/reach3.in
【样例输出 3】 见 reach/reach3.ans
【样例输入 4】 见 reach/reach4.in
【样例输出 4】 见 reach/reach4.ans
【测试点约束】
subtask 1(20pts):n ≤ 50
subtask 2(30pts):n ≤ 500
subtask 3(50pts):n ≤ 3 × 10^3
对于所有数据,满足 1≤n≤3×103,vi,j∈[1,100]∪−1
注意读入量较大,在 reach/qio.cpp 中下发了快读快写,你可以在其基础上进行修改。