题目链接:http://118.190.20.162/view.page?gpid=T13
#include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
const int N=1001;
int n,m,k,d;
int fx[4]={0,0,-1,1};
int fy[4]={1,-1,0,0};
int order[N][N];
int vis[N][N];
struct Node{
int x,y;
int dis;
}E[N*N];
queue<Node> q;
void BFS(){
long long ans=0;
while(!q.empty()){
Node top=q.front();
q.pop();
for(int i=0;i<4;i++){
int xx=top.x+fx[i],yy=top.y+fy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&!vis[xx][yy]){
ans+=order[xx][yy]*(top.dis+1);
vis[xx][yy]=1;
Node new_top;
new_top.x=xx;
new_top.y=yy;
new_top.dis=top.dis+1;
q.push(new_top);
}
}
}
cout<<ans<<endl;
}
int main() {
cin>>n>>m>>k>>d;
int a,b,c;
for(int i=0;i<m;i++){
cin>>E[i].x>>E[i].y;
E[i].dis=0;
q.push(E[i]);
}
for(int i=0;i<k;i++){
cin>>a>>b>>c;
order[a][b]+=c;
}
for(int i=0;i<d;i++){
cin>>a>>b;
vis[a][b]=1;
}
BFS();
return 0;
}