标签:cond 餐饮 bit 一个 using 出队 ons second 单位
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define inf 0x3f3f3f3f 4 #define pii pair<int,int> 5 #define mp make_pair 6 #define x first 7 #define y second 8 9 const int maxn=1010; 10 int N,M,K,D; 11 queue<pii>q; 12 int d[maxn][maxn]; 13 int w[maxn][maxn]; 14 bool ban[maxn][maxn]; 15 bool vis[maxn][maxn]; 16 int fx[4][2]={1,0,-1,0,0,1,0,-1}; 17 long long bfs(){ 18 long long res=0; 19 while(!q.empty()){ 20 pii o=q.front();q.pop(); 21 if(vis[o.x][o.y])continue; 22 vis[o.x][o.y]=1; 23 if(w[o.x][o.y])res+=w[o.x][o.y]*d[o.x][o.y]; 24 for(int i=0;i<4;++i){ 25 int dx=o.x+fx[i][0]; 26 int dy=o.y+fx[i][1]; 27 if(dx<1||dy<1||dx>N||dy>N||ban[dx][dy]||vis[dx][dy]||d[dx][dy]<=d[o.x][o.y]+1)continue; 28 d[dx][dy]=d[o.x][o.y]+1; 29 q.push(mp(dx,dy)); 30 } 31 }return res; 32 } 33 int main(){ 34 int u,v,s; 35 memset(d,inf,sizeof(d)); 36 scanf("%d%d%d%d",&N,&M,&K,&D); 37 while(M--){ 38 scanf("%d%d",&u,&v); 39 q.push(mp(u,v)); 40 d[u][v]=0; 41 } 42 while(K--){ 43 scanf("%d%d%d",&u,&v,&s); 44 w[u][v]+=s; 45 } 46 while(D--){ 47 scanf("%d%d",&u,&v); 48 ban[u][v]=1; 49 } 50 printf("%lld\n",bfs()); 51 return 0; 52 }
标签:cond 餐饮 bit 一个 using 出队 ons second 单位
原文地址:https://www.cnblogs.com/zzqc/p/12509453.html