2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)
整理的算法模板合集: ACM模板
题目传送门
三段题面,只有第三段是有用的…前两段又长单词又难懂,就是在讲故事。。。不过针对四种情况给出四个图帮助我们理解题意是真的赞,可能出题人怕我们看不懂吧(第一句话有好几个生词没见过让我怀疑这是不是英语 )
题目大意就是一个n*m的矩阵,每一个格子上都有一个数字,我们可以从任意的点出发,每次向上下左右四个方向走,只能到有公共边的格子上去,求一共有多少条完整路径。
其中完整路径的定义是整条路上数字从1连续地走到n,其中如果到n了以后他的四个方向都没有n+1也就是不能继续往下走了才算到终点。(还有一个要求就是路径的长度必须大于等于4才算)
int n, m;
int head[N], ver[M], nex[M], tot;
int f[N][5];
int in[N];
queue<int>q;
int ans;
int G[maxn][maxn];
void add(int x, int y)
{ver[tot] = y;nex[tot] = head[x];head[x] = tot ++ ;in[y] ++ ;
}
void toposort()
{for(int i = 1; i <= n * m; ++ i){if(!in[i])q.push(i), f[i][1] = 1;//所有起点,赋值为1}while(q.size()){int x = q.front();q.pop();bool flag = true;for(int i = head[x]; ~i; i = nex[i]){int y = ver[i];in[y] -- ;f[y][2] = (f[y][2] + f[x][1]) % mod;f[y][3] = (f[y][3] + f[x][2]) % mod;f[y][4] = (f[y][4] + f[x][3] + f[x][4]) % mod;if(in[y] == 0)q.push(y);flag = false;//没有到终点}if(flag)ans = (ans + f[x][4]) % mod;}
}
int main()
{memset(head, -1, sizeof head);memset(G, 0x3f, sizeof G);//千万注意这个初始化scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++ i)for(int j = 1; j <= m; ++ j)scanf("%d", &G[i][j]);for(int i = 1; i <= n; ++ i)for(int j = 1; j <= m; ++ j){int x, y = (i - 1) * m + j;if(i > 1)if(G[i - 1][j] == G[i][j] - 1)x = (i - 2) * m + j, add(x, y);if(j > 1)if(G[i][j - 1] == G[i][j] - 1)x = y - 1, add(x, y);if(i < n)if(G[i + 1][j] == G[i][j] - 1)x = y + m, add(x, y);if(j < m)if(G[i][j + 1] == G[i][j] - 1)x = y + 1, add(x, y);}toposort();printf("%d", ans % mod);return 0;
}
2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)相关推荐
- 2019 ICPC Asia Nanjing Regional
题号 题目 难度 知识点 A A Hard Problem 签到题 思维题 B Chessboard C Digital Path 签到题 dfs+记忆化搜索 D Holes E Observatio ...
- The 2019 ICPC Asia Nanjing Regional Contest(A、C、K)
A. A Hard Problem 在全排列1到n中每k个数作为一段,每段必存在u,v使得u是v的一个因子,考虑每段最短是多长,直接倒着考虑,假如n=6,最后肯定是要3...6才能符合题意,假如n=7 ...
- 2019 ICPC Asia Nanjing Regional J.Spy(KM算法O(n^3)板子题)
整理的算法模板合集: ACM模板 前面好几段又在讲故事- 题目大意: a[i]表示对手的每个队伍战斗力 p[i]表示打败对手后获得的分数 b[i]表示我方第一种人的战斗力 c[i]表示我方第二种人的战 ...
- 2019 ICPC Asia Nanjing Regional K.Triangle(求一个能将三角形分成两个面积相同的线段、计算几何)
整理的算法模板合集: ACM模板 题目传送门 用板子判断点是否在线段上即可.紫书的板子有点问题,判断是否在线段上的时候应该是<=才能A,书上是 < - 对于第二问我们先特判一下特殊的情况, ...
- 2019 ICPC Asia Nanjing Regional I. Space Station题解
文章目录 [题目链接] [前言] [题目大意] [解题思路] 一.优先暴力 二.记忆化 三.unordered_map以及思维优化 四.乘法逆元(拓展内容) [后记] [题目链接] https://n ...
- 2019 ICPC Asia Yinchuan Regional(9 / 13)
2019 ICPC Asia Yinchuan Regional A - Girls Band Party(分组背包) 每个物品有两个标签,名字,颜色,当名字是设置为奖赏时会对整体加上0.1 的贡献, ...
- The 2019 ICPC Asia Shanghai Regional Contest
The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...
- 2019 ICPC Asia Nanchang Regional
2019 ICPC Asia Nanchang Regional C. And and Pair E. Bob's Problem 链接:https://www.jisuanke.com/contes ...
- 2019 ICPC Asia Yinchuan Regional H - Delivery Route 强连通+最短路+拓扑
原题链接:https://nanti.jisuanke.com/t/42388 目录 题意 分析 Code 题意 有n个点,x条双向边且边权为正,y条单向边边权可以为负,问从某个点出发到全部点的最短距 ...
最新文章
- java里写分页,自己写的Java分页类
- 堆栈转化8进制_11张卡片学会进制转换
- asp.net core 2.0 web api基于JWT自定义策略授权
- 英语口语-文章朗读Week10 Thursday
- docker公共存储库_Docker入门(2)——镜像结构和私有镜像库
- 嵌入式系统与人工智能 1
- 优化算法 - 遗传算法
- 巧用 arp 命令 防p2p终结者的方法
- 学习andriod开发之 自己开发短信发送软件
- 迷宫生成算法(二)(C++)
- 数字化的下一个目标,就是产业链|数字思考者50人
- 这招涨粉神术,你不得不学
- android 信息-- 发彩信(1)
- Excel单元格中怎么批量将两行合并成一行
- IBM小型机维护经验2则
- C语言小游戏:文字冒险游戏
- 行为模式--子类沙箱
- 斐波那契数列 - 实现一个斐波那契数列,并且打印出来
- WebMatrix开发ASP.NET试用手记[转帖]
- PHP curl使用代理ip请求