2019 ICPC 南京 Digital Path

题目链接:Digital Path


路径数量,我们可以想到每次暴力bfs往附近转移。

但是肯定TLE,然后这道题会有路径覆盖的问题,有些路径会被覆盖掉,所以所有有效的路径肯定是从入度为0的点开始。

然后也有许多路径会有交集,所以每次暴力从入度为0的点开始bfs是不行的,然后其实我们可以想到,这个和拓扑排序十分像,于是我们用拓扑排序来状态转移,当这个点入度为0时才加入队列,就保证了每个点入队一次,出队一次的复杂度。

我们用 dp[i][j][k]来表示当前在位置 (i,j),到达长度为k的路径数量,大于等于4算在一起。


AC代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+10,p=1e9+7;
const int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int n,m,g[N][N],in[N][N],out[N][N],dp[N][N][5],res;
void top_sort(){
	queue<pair<int,int> > q;
	for(int i=1;i<=n;i++)	for(int j=1;j<=m;j++)	if(!in[i][j]){
		q.push({i,j});	dp[i][j][1]=1;
	}
	while(q.size()){
		int ux=q.front().first,uy=q.front().second; q.pop();
		for(int i=0;i<4;i++){
			int tx=ux+dx[i],ty=uy+dy[i];
			if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&g[tx][ty]==g[ux][uy]+1){
				dp[tx][ty][2]=(dp[tx][ty][2]+dp[ux][uy][1])%p;
				dp[tx][ty][3]=(dp[tx][ty][3]+dp[ux][uy][2])%p;
				dp[tx][ty][4]=(dp[tx][ty][4]+dp[ux][uy][3]+dp[ux][uy][4])%p;
				if(--in[tx][ty]==0)	q.push({tx,ty});
			}
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)	for(int j=1;j<=m;j++)	scanf("%lld",&g[i][j]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			for(int k=0;k<4;k++){
				int tx=i+dx[k],ty=j+dy[k];
				if(tx>=1&&tx<=n&&ty>=1&&ty<=m){
					if(g[tx][ty]==g[i][j]+1)	out[i][j]++;
					if(g[tx][ty]==g[i][j]-1)	in[i][j]++;
				}
			}
	top_sort();
	for(int i=1;i<=n;i++)	for(int j=1;j<=m;j++)	if(!out[i][j]){
		res=(res+dp[i][j][4])%p;
	}
	cout<<res<<endl;
	return 0;
}
全部评论

相关推荐

notbeentak...:就抓,嗯抓,开不开匿名都要抓,一点坏事不让说,就对公司顶礼膜拜佩服的五体投地就对了
点赞 评论 收藏
分享
来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务