AcWing 3205. java面向对象编程
原题链接
中等
作者:
季之秋
,
2021-03-01 21:48:27
,
所有人可见
,
阅读 259
import java.util.*;
import java.io.*;
public class Main{
static class Pair{
int a,b;
Pair(int x,int y){
a=x;b=y;
}
}
static class Node{
int a,b,c;
Node(int x,int y,int w){
a=x;b=y;c=w;
}
}
static int N=1010,n,m,k,d;
static boolean g[][]=new boolean[N][N];
static Node cust[]=new Node[N*N];
static Queue<Pair> q=new LinkedList<>();
static int dist[][]=new int[N][N];
public static void main(String[] args) throws Exception {
BufferedReader sc=new BufferedReader(new InputStreamReader(System.in));
String s2=sc.readLine();
String[] s1=s2.split(" ");
n=Integer.parseInt(s1[0]);
m=Integer.parseInt(s1[1]);
k=Integer.parseInt(s1[2]);
d=Integer.parseInt(s1[3]);
for(int i=0;i<N;i++) Arrays.fill(dist[i],0x3f3f3f3f);
for(int i=0;i<m;i++){
String s3=sc.readLine();
String[] s=s3.split(" ");
int x=Integer.parseInt(s[0]);
int y=Integer.parseInt(s[1]);
dist[x][y]=0;
q.add(new Pair(x,y));
}
for(int i=0;i<k;i++){
String s3=sc.readLine();
String[] s=s3.split(" ");
int x=Integer.parseInt(s[0]);
int y=Integer.parseInt(s[1]);
int c=Integer.parseInt(s[2]);
cust[i]=new Node(x,y,c);
}
for(int i=0;i<d;i++){
String s3=sc.readLine();
String[] s=s3.split(" ");
int x=Integer.parseInt(s[0]);
int y=Integer.parseInt(s[1]);
g[x][y]=true;
}
sc.close();
dfs();
long res=0;
for(int i=0;i<k;i++){
res+=dist[cust[i].a][cust[i].b]*cust[i].c;
}
System.out.println(res);
}
static void dfs(){
int dx[]={0,-1,0,1};
int dy[]={1,0,-1,0};
while(!q.isEmpty()){
Pair t=q.poll();
for(int i=0;i<4;i++){
int x=t.a+dx[i];
int y=t.b+dy[i];
if(x<=0||x>n||y<=0||y>n||g[x][y]) continue;
if(dist[x][y]>dist[t.a][t.b]+1){
dist[x][y]=dist[t.a][t.b]+1;
q.add(new Pair(x,y));
}
}
}
}
}