ccf-最優配餐
阿新 • • 發佈:2018-12-22
#include<bits/stdc++.h> using namespace std; int f[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; int vis[1001][1001]; struct node{ int u,v,t; node(int uu,int vv,int tt){ u=uu;v=vv;t=tt; } }; queue<node>pq; int main() { int n,m,k,d,a,b,c; long long ans=0; cin>>n>>m>>k>>d; memset(vis,0,sizeof vis); for(int i=0;i<m;i++) { cin>>a>>b; vis[a][b]=-1;//不能到 pq.push(node(a,b,0));//多源點bfs } for(int i=0;i<k;i++) { cin>>a>>b>>c; vis[a][b]+=c;//價格 } for(int i=0;i<d;i++) { cin>>a>>b; vis[a][b]=-1;//不能到 } while(!pq.empty()) { node tmp=pq.front(); pq.pop(); int x=tmp.u,y=tmp.v,t=tmp.t; for(int i=0;i<4;i++) { int xx=x+f[i][0]; int yy=y+f[i][1]; int tt=t+1; if(xx<1||xx>n||yy<1||yy>n||vis[xx][yy]==-1) continue; if(vis[xx][yy]>0) { ans+=tt*vis[xx][yy]; vis[xx][yy]=-1; } pq.push(node(xx,yy,tt)); vis[xx][yy]=-1; } } cout<<ans; }