CCF模拟题 最优配餐
2015-03-21 19:39
162 查看
[b]最优配餐[/b]
问题描述
栋栋最近开了一家餐饮连锁店,提供外卖服务。随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。
栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。
方格图中的线表示可以行走的道路,相邻两个格点的距离为1。栋栋要送餐必须走可以行走的道路,而且不能经过红色标注的点。
View Code
时间限制: | 1.0s |
内存限制: | 256.0MB |
栋栋最近开了一家餐饮连锁店,提供外卖服务。随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。
栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。
方格图中的线表示可以行走的道路,相邻两个格点的距离为1。栋栋要送餐必须走可以行走的道路,而且不能经过红色标注的点。
#include <bits/stdc++.h> #define pii pair<int,int> #define LL long long using namespace std; const int maxn = 1010; const int dir[4][2] = {-1,0,0,-1,1,0,0,1}; int n,m,k,d,e[maxn][maxn] = {0}; struct node { int x,y,step; node(int a = 0,int b = 0,int c = 0) { x = a; y = b; step = c; } }; queue<node>q; bool isIn(int x,int y) { return x > 0 && x <= n && y > 0 && y <= n; } LL bfs() { LL ans = 0; int cnt = 0; while(!q.empty()) { node now = q.front(); q.pop(); for(int i = 0; i < 4; ++i) { int nx = now.x+ dir[i][0]; int ny = now.y + dir[i][1]; if(isIn(nx,ny)&&!(e[nx][ny]&1)) { e[nx][ny] |= 1; q.push(node(nx,ny,now.step+1)); if(e[nx][ny]&2) { ans += (now.step+1)*(e[nx][ny]>>2); if(++cnt == k) return ans; } } } } return ans; } int main() { int x,y,z; while(~scanf("%d %d %d %d",&n,&m,&k,&d)) { for(int i = 0; i < m; ++i) { scanf("%d %d",&y,&x); q.push(node(x,y,0)); e[x][y] |= 1; } for(int i = 0; i < k; ++i) { scanf("%d %d %d",&y,&x,&z); e[x][y] = (e[x][y]|2) + (z<<2); } for(int i = 0; i < d; ++i) { scanf("%d %d",&y,&x); e[x][y] |= 1; } printf("%I64d\n",bfs()); } return 0; }
View Code
相关文章推荐
- (CCF 201409-4)最优配餐 [简单多源点BFS]
- ccf 201409-4 最优配餐 (90分待更新) bfs
- 最优配餐-CCF
- CCF之最优配餐(java)
- CCF CSP 最优配餐 BFS
- CCF模拟题 最优灌溉
- CCF 201409-4 最优配餐(BFS)
- ccf 最优配餐
- 【CCF】最优配餐
- CCF 最优配餐
- CCF——最优配餐
- CCF-CSP 201409-4 最优配餐(BFS)
- CCF 最优配餐【暴力BFS】
- CCF——最优配餐
- CCF CSP 201409-4 最优配餐
- CCF 201409-4 最优配餐(bfs)
- CCF最优配餐
- CCF 201409-4 最优配餐
- CCF 最优配餐
- ccf 201409-4 最优配餐