bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond
P1606 [USACO07FEB]白银莲花池Lilypad Pond
转化为最短路求解
放置莲花的方法如果直接算会有重复情况。
于是我们可以先预处理和已有莲花之间直接互相可达的点,将它们连边(对,忽略它们)。
于是剩下的就是边权为1的边了。
酱紫我们就成功转化为了边权问题。
蓝后跑跑最短路顺便计个数就解决了。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 using namespace std; 6 #define N 50 7 #define inf 2e9 8 typedef long long ll; 9 struct data{ 10 int d,u; 11 data(){} 12 data(int A,int B): 13 d(A),u(B){} 14 bool operator < (const data &tmp) const{ 15 return d>tmp.d; 16 } 17 };priority_queue <data> h; 18 const int d1[8]={2,2,-2,-2,1,-1,1,-1}; 19 const int d2[8]={-1,1,-1,1,2,2,-2,-2}; 20 int n,m,S,T,id[N][N],e[N][N],d[N*N]; 21 int cnt,hd[N*N],nxt[100009],ed[N*N],poi[100000]; 22 bool vis[N][N]; ll t[N*N]; 23 void adde(int x,int y){ 24 nxt[ed[x]]=++cnt; hd[x]=hd[x]?hd[x]:cnt; 25 ed[x]=cnt; poi[cnt]=y; 26 } 27 void draw(int tt,int x,int y){ 28 vis[x][y]=1; 29 for(int i=0,r1,r2;i<8;++i){ 30 r1=x+d1[i],r2=y+d2[i]; 31 if(r1<1||r1>n||r2<1||r2>m||vis[r1][r2]) continue; 32 if(e[r1][r2]==1) draw(tt,r1,r2); 33 else vis[r1][r2]=1,adde(tt,id[r1][r2]); 34 } 35 } 36 int main(){ 37 scanf("%d%d",&n,&m); 38 for(int i=1,r=0;i<=n;++i) 39 for(int j=1;j<=m;++j){ 40 scanf("%d",&e[i][j]); 41 id[i][j]=++r; d[r]=inf; 42 if(e[i][j]==3) S=r; 43 if(e[i][j]==4) T=r; 44 } 45 for(int i=1;i<=n;++i) 46 for(int j=1;j<=m;++j) 47 if(e[i][j]==0||e[i][j]==3){ 48 memset(vis,0,sizeof(vis)); 49 draw(id[i][j],i,j);//没有莲花:就和其他所有与该点之间只要加一朵莲花就可达的点,连一条边权1的边。 50 } 51 h.push(data(d[S]=0,S)); t[S]=1; 52 while(!h.empty()){ 53 data x=h.top(); h.pop(); 54 if(x.d!=d[x.u]) continue; 55 for(int i=hd[x.u];i;i=nxt[i]){ 56 int to=poi[i]; 57 if(d[to]==d[x.u]+1){ 58 t[to]+=t[x.u]; 59 }else if(d[to]>d[x.u]+1){ 60 d[to]=d[x.u]+1; 61 t[to]=t[x.u]; 62 h.push(data(d[to],to)); 63 } 64 } 65 } 66 if(d[T]==inf) printf("-1"); 67 else printf("%d\n%lld",d[T]-1,t[T]);//减去终点多算的一朵 68 return 0; 69 }
View Code
转载于:https://www.cnblogs.com/kafuuchino/p/10058009.html
bzoj1698 / P1606 [USACO07FEB]白银莲花池Lilypad Pond相关推荐
- 【USACO】青铜莲花池[2]
前言 搜索到这篇文章的朋友,那么很巧了,我们多半是一个学校的,为什么呢?因为这道题叫白银莲花池.. 题目 [问题描述] FJ建造了一个美丽的池塘,用于让奶牛们锻炼.这个长方形的池子被分割成了 M 行和 ...
- P1606 [USACO07FEB]荷叶塘Lilypad Pond(最短路计数)
P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...
- bzoj 1632: [Usaco2007 Feb]Lilypad Pond(BFS)
1632: [Usaco2007 Feb]Lilypad Pond Time Limit: 5 Sec Memory Limit: 64 MB Submit: 688 Solved: 230 [S ...
- bzoj 1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘(BFS)
1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 550 Solved: 1 ...
- Problem : [usaco2007 Feb]Lilypad Pond
Problem : [usaco2007 Feb]Lilypad Pond Description Farmer John 建造了一个美丽的池塘,用于让他的牛们审美和锻炼. 这个长方形的池子被分割成了 ...
- 故事公园-—昆明莲花池
每个公园都有自己的地理特征,奇风异俗,各存其韵.昆明莲花池公园则因几处遗址以及涉及的故事,让人们留连往返,奕奕不舍,他(她)们的故事让世人感叹! 这里的遗址其中有南明末代皇帝的墓地,陈圆圆的梳妆楼,现 ...
- 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond(spfa+最短路计数) 题解
题目来源: https://www.luogu.org/problemnew/show/P1606 题目描述: 题目描述 FJ has installed a beautiful pond for h ...
- [USACO07FEB] Lilypad Pond
https://www.luogu.org/problem/show?pid=1606 题目描述 FJ has installed a beautiful pond for his cows' aes ...
- 洛谷P1606 Lilypad Pond G
传送门 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enjoyment and exercise. The recta ...
- [USACO07FEB]Lilypad Pond
Link 考场上把我送走的一道题 考试时,晃眼一看,这不是裸的最短路计数吗?!赶忙写好了代码,自信地关闭了文件.然后,0分-- 那么回过头来,到底错在哪里?只有新加的荷叶才会被统计,而原来就有的荷叶不 ...
最新文章
- linux7提示软件安装源位置不对,详解 RHEL7.1 yum源配置与软件安装
- 详解Scala与Java的互动
- BeetleX.FastHttpApi之JWT和自定义访问验证
- Jsp+Ssh+Mysql实现的简单的企业物资信息管理系统
- 耳挂式蓝牙耳机原理_一种耳挂式蓝牙耳机的制作方法
- cgcs2000大地坐标系地图_CGCS2000坐标系和WGS84坐标系的区别联系
- 计算机显示去掉拼音分类,win10系统取消电脑文件显示以字母数字拼音分组的解决方法...
- FFmpeg —— 为视频添加文字水印(完美解决中文乱码,无需编译)
- 优锘科技:森数据初体验
- XXL任务调度平台+java实现定时任务
- STACEY矩阵-0114
- KMP --算法竞赛(33)
- MySQL-存储表情字符
- python用matplotlib作图时,x轴为时间轴,如何让x轴每隔几个点显示一次?
- 国产加速度传感器QMA6100P
- wdcp-apache配置错误导致进程淤积进而内存吃紧
- 【LeetCode】【队列】剑指 Offer 59 - I. 滑动窗口的最大值 思路解析和代码
- Replication(上):常见复制模型分布式系统挑战
- 【求整数 1-100 的累加值,但要求跳过所有个位数为3的数 】
- 对replaceA11(., /)的理解
热门文章
- 如何将文字转换为二维码 python_用python将二维码转换成字符直接输出控制台
- ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求
- kubernetes配置kubeconfig访问集群
- 百度apollo自动驾驶planning代码学习-Apollo\modules\planning\constraint_checker\CollisionChecker类代码详解
- 【无标题】对于_, predicted = torch.max(outputs.data, 1)的理解
- c语言方程没有解,【C语言】一元二次方程的解
- 计算机桌面有边框阴影,“桌面图标下面有阴影的解决方案”的解决方案
- java 截取图片后缀
- 使用Java实现身份证真假校验
- MATLAB 使用GUI设计简单的计算器