2019ICPC亚洲区域赛(南京) C-Digital Path 题解
2019ICPC亚洲区域赛(南京) C-Digital Path
题目链接 Digital Path
做这道题的时候Edge浏览器的翻译给我打来了很大的困扰,我再也不用翻译器读题了。(似乎也不太可能)
观察之后的第一想法是BFS,但是再确定BFS的根节点的过程中我发现,这个图看作DAG,入度为0的点就是起点。
然后自然而然地把思路转到了拓扑排序上,在拓扑排序的过程中更新dp数组。
状态转移方程为:
dp[xx][yy][k]+=dp[x][y][k−1],wherek≤3dp[xx][yy][k]+=dp[x][y][k-1], \,where\,k≤3dp[xx][yy][k]+=dp[x][y][k−1],wherek≤3
dp[xx][yy][4]+=dp[x][y][3]+dp[x][y][4]dp[xx][yy][4]+=dp[x][y][3]+dp[x][y][4]dp[xx][yy][4]+=dp[x][y][3]+dp[x][y][4]
其中dp[xx][yy][4]dp[xx][yy][4]dp[xx][yy][4]表示以(xx,yy)(xx,yy)(xx,yy)为终点的且长度大于等于4的路径个数。
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9+7;
const int MAXN=1e3+5;
struct node{int x,y;node(int a,int b): x(a),y(b){}
};
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1},n,m,mp[MAXN][MAXN],in[MAXN][MAXN],out[MAXN][MAXN],dp[MAXN][MAXN][5];
queue <node> Q;
int main(){cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>mp[i][j];for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int k=0;k<4;k++){int newi=i+dx[k],newj=j+dy[k];if(newi<1||newi>n||newj<1||newj>m) continue;if(mp[i][j]==mp[newi][newj]+1) in[i][j]++;if(mp[i][j]==mp[newi][newj]-1) out[i][j]++;} for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(in[i][j]==0){dp[i][j][1]++;Q.push(node(i,j));}while(!Q.empty()){int x=Q.front().x,y=Q.front().y; Q.pop();for(int i=0;i<4;i++){int xx=x+dx[i];int yy=y+dy[i];if(xx>n||xx<1||yy>m||yy<1) continue;if(mp[xx][yy]!=mp[x][y]+1) continue;if(in[xx][yy]!=0){dp[xx][yy][1]=0;dp[xx][yy][2]=(dp[xx][yy][2]+dp[x][y][1])%MOD;dp[xx][yy][3]=(dp[xx][yy][3]+dp[x][y][2])%MOD;dp[xx][yy][4]=(dp[xx][yy][4]+dp[x][y][3]+dp[x][y][4])%MOD;in[xx][yy]--;if(in[xx][yy]==0) Q.push(node(xx,yy));}}}int ans=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(out[i][j]==0)ans=(ans+dp[i][j][4])%MOD;cout<<ans;return 0;
}
提交了5次才通过,原来是我把1e9+7写成了1e9
队友笑疯了
2019ICPC亚洲区域赛(南京) C-Digital Path 题解相关推荐
- 2019ICPC亚洲区域赛南京网络赛
Problem F Greedy Sequence 题目链接:https://nanti.jisuanke.com/t/41303 题意: 给出n个整数,构造s1,s2,s3-sns1,s2,s3-s ...
- 2019ICPC亚洲区域赛日程与2019CCPC比赛日程
银川 8.31 10.19-20 南京 9.01 10.26-27 徐州 9.07 11.02-03 南昌 9.08 11.09-10 沈阳 9.14 11.16-17 上海 9.15 11.23-2 ...
- 2019ICPC亚洲区域赛南昌网络赛
Problem B Fire-Fighting Hero 题目链接:https://nanti.jisuanke.com/t/41349 题意: 判断消防英雄去其他消防点的最短路径的最大值与消防队去其 ...
- Evil Coordinate亚洲区域赛(南京)
Evil Coordinate 亚洲区域赛(南京) 你好! 我是一个刚刚接触acm的小菜鸡,今天对南京站的E有一点想法,写在这里和大家分享一下. 由于自己的代码能力比较弱,所以写的比较繁琐.欢迎大家优 ...
- 第44届ICPC国际大学生程序设计亚洲区域赛(南京站)心得体会
2019年10月27日在南京航天航空大学举行第44届ICPC国际大学生程序设计亚洲区域赛(南京站).我有幸能与袁应师兄.胡富云一起去参赛.这一次比赛深感愧疚,我们队没能做出一个题,还有自身实力太弱. ...
- 2018 ACM-ICPC亚洲区域赛 北京赛区
2018 ACM-ICPC亚洲区域赛 北京赛区 A - Jin Yong's Wukong Ranking List HihoCoder - 1870 题意 给N对关系,每对关系表示为A 比B 厉害, ...
- 2018 焦作站亚洲区域赛校内选拔赛题解
SUST_2018 焦作站亚洲区域赛校内选拔赛 A.高速 by yoyo tag:图论.最短路 //最短路 #include<bits/stdc++.h> using nam ...
- SUST_2018 焦作站亚洲区域赛校内选拔赛题解
SUST_2018 焦作站亚洲区域赛校内选拔赛 A.高速 by yoyo tag:图论.最短路 //最短路 #include<bits/stdc++.h> using nam ...
- 第43期ACM_ICPC亚洲区域赛(焦作站)感想
2018年11月25日在焦作河南理工大学举办了第43期ACM_ICPC亚洲区域赛,本次比赛我很荣幸的代表了学校参加了比赛,但是很可惜只是去打了个铁(嘤嘤嘤~~).不过虽然没有拿到牌,但是这也是一场不错 ...
- 2018年ACM-ICPC亚洲区域赛(焦作)赛后总结
昨天刚参加完人生中的第一场ACM-ICPC亚洲区域赛焦作站,对于这次比赛两个字"自闭". 正式赛前一天早上七点起床,从西安坐高铁去郑州,然后坐城际高铁去焦作,因为热身赛马上就要开始 ...
最新文章
- java 值类型与引用类型_JAVA 关于值类型和引用类型的区别
- Python-OpenCV 笔记3 -- 霍夫变换(Hough)
- 使用using与typedef来定义别名
- 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛)解题报告
- Linux系统内存管理实验报告,Linux 内存管理 综合实验报告.pdf
- nginx学习之详细安装篇(二)
- 【PS基本操作】如何使用PS把图片背景去掉、透明背景
- 小学五年级计算机考试试题,小学信息技术考试题库中五年级试题——选择题
- Spring拦截器和过滤器的区别
- 强大视频电影播放软件——乐鱼影音盒!
- 【模拟电子技术Analog Electronics Technology 6】—— 共射放大电路的原理与改进
- Spring Boot为什么不需要额外安装Tomcat?
- local_listener参数(2)---elaine
- python装在固态还是机械好_大容量与高性能SSD硬盘的比较
- android学习笔记之GoogleMap 【转】
- 【转】WebMagic-总体流程源码分析
- 不限空间大小 会赚钱的网盘 收益模式详解
- 计算机等级分图表,计算机二级Office:Excel模拟分析和图表知识点讲解
- practice是什么意思_practice是什么意思
- android加载ftp图片,按键安卓版网络访问之 图片处理,FTP,HTTP 实现