问题 F: 发送他们房子

内存限制:524 MB 时间限制:3 S
题面:传统 评测方式:文本比较 上传者:
提交:1 通过:1

题目描述

村里拆迁了,政府给村里的 nn 户人家准备了一个安置小区。这个小区是长条型的,里面有 mm 栋楼,这些楼房坐落在一条东西走向的马路旁,自西向东依次标号 1∼m1m ,小区的大门在最西边,第 ii 栋楼距离小区大门 pipi 米。

拆迁户是挑剔的,每一户人家对每栋楼都有着不同的不满意度,记 si,jsi,j 为第 ii 户人家对第 jj 栋楼的不满意度。

你作为村委会干部被领导安排给这 nn 户村民分配房子,每栋楼里安置村民的户数没有上限

特别的,村民们向你提了 kk 个条件,每个条件是这样的,由于第 xx 户村民与第 yy 户村民是好朋友,他们两户房子的相距不能超过 dd 米。

现在你需要在满足这 kk 个条件的前提下,给每户村民分配房子,使得总的不满意度最小。


为了防止输入过大带来的常数问题,C++ 选手请尽量使用关闭流同步的 std::cin 和 std::cout 实现输入输出,否则可能出现因读入输出问题导致的 TLE 等。

int main(){
  std::ios::sync_with_stdio(0);
  std::cin.tie(0);

  // your code

  return 0;
}


输入格式

第一行一个整数 TT (1≤T≤11)(1T11),表示测试数据组数。

每组数据的第一行包含三个整数 n,m,kn,m,k (1≤n×m≤2000,0≤k≤n(n−1)2,0≤k×m≤104)(1n×m2000,0k2n(n1),0k×m104),分别代表村民户数,小区楼数与村民要求数。

接下来一行 mm 个整数 p1,p2,…,pmp1,p2,,pm (0≤pi≤109)(0pi109),其中 pipi 代表第 ii 栋楼的位置。

接下来 nn 行,每行包含 mm 个整数 si,1,si,2,…si,msi,1,si,2,si,m (1≤si,j≤1000)(1si,j1000)

接下来 kk 行,每行包含三个整数 x,y,dx,y,d (1≤x,y≤n,0≤d≤109)(1x,yn,0d109),表示一个条件。

输出格式

对于每组数据,输出一行一个整数,表示最小总不满意度。

输入样例 复制

2
4 2 4
1 2
6 2
1 6
6 2
1 6
1 2 2
1 3 2
2 4 2
3 4 2
4 2 2
1 3
6 2
1 6
6 2
1 6
1 2 1
1 3 1

输出样例 复制

6
11