洛谷P1037 产生数 (Floyd联通性问题)

Floyd算法 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。 Floyd-Warshall算法不能解决带有“负权回路”(或者叫“负权环”)的图,因为带有“负权回路”的图没有最短路。其实如果一个图中带有“负权回路”那么这个图则没有最短路。 核心代码: for(k=1;k<=n;k++) for(i=1;i<=n... 阅读详情

问题描述:

题目传送门


解题思路:

可以利用乘法原理,判断原数上每一位数字有几种变化情况,然后相乘即为答案。
很显然,题目所给的变化情况即为一条边,而每一个数字的变化即为一个连通块,因此单个数字变化的个数即为这个连通块的大小。
判断联通快的算法很多,可以通过 d f s dfs dfs 和 b f s bfs bfs 等搜索进行遍历每个连通块,这里我们通过 F l o y d Floyd Floyd 求出 i i i 和 j j j 是否相连来解决连通块问题。
既 i i i 所能到达的所有 j j j 都处在同一连通块,至于连通块的大小即为 i i i 所能到达的元素个数。

判断联通性的 F l o y d Floyd Floyd 我们可以这么写:

	for(int k=0;k<=9;k++)
	  for(int i=0;i<=9;i++)
	    for(int j=0;j<=9;j++)
	      dis[i][j]=dis[i][j]||(dis[i][k]&&dis[l][k]);
	      //当 dis 为真,即为联通

用这个板子我们就能轻松的过了这道题。


CODE:

#include <bits/stdc++.h>
using namespace std;
string s;
int k;
bool dis[50][50]={false};
int num[20];
__int128 ans=1;
inline void read(__int128 &X) //__int128的读入
{
	X = 0;
	int w=0; char ch=0;
	while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
	while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
	if (w) X = -X;
}
void print(__int128 x)  //__int128的输出
{
	if (!x) return ;
	if (x < 0) putchar('-'),x = -x;
	print(x / 10);
	putchar(x % 10 + '0');
}
int main()
{
	cin>>s;
	cin>>k;
	int a,b;
	for(int i=1;i<=k;i++)
	  {
	  	cin>>a>>b;
	  	dis[a][b]=true;
	  }
	for(int i=0;i<=9;i++) dis[i][i]=true;
	for(int l=0;l<=9;l++)
	  for(int i=0;i<=9;i++)
	    for(int j=0;j<=9;j++)
	      dis[i][j]=dis[i][j]||(dis[i][l]&&dis[l][j]);
	for(int i=0;i<=9;i++)
	  {
	  	for(int j=0;j<=9;j++)
	  	  if(dis[i][j])
	  	    num[i]++;  //每个数字所在的连通块的大小
	  }
	for(int i=0;i<s.size();i++)
	  ans*=max(1,num[s[i]-'0']);
	print(ans);
	return 0;
} 
洛谷P1354 房间最短路问题——floyd 题目描述 在一个长宽均为10,入口出口分别为(0,5)、(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经。 输入输出格式 输入格式: 第一排为n(n&lt;=20),墙的数目。 接下来n排,每排5个实数x,a1,b1,a2,b2。 x表示墙的横坐标(所有墙都是竖直的),a1-b1和a2-b2之间为空缺。 a1、b1、a2、b2保持递增,x1-xn也... 阅读详情

相关推荐

WPF基础系列六:MVVM框架

MVVM框架 文章目录MVVM框架前言一、MVVM框架简介1. 什么是MVVM?2. MVVM的优势3.MVVM的应用场景二、MVVM使用及示例 前言 在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界面时,逻辑代码修改很少,甚至不用修改。 与WinForm开发相比,我们一般在后置代码中会使用控件的名字来操作控件的属性来更新UI,而在WPF中通常是通过

iceberg7012的博客 2万+

蒟蒻の小窝(floyed:洛谷p1522)

本篇博客是我搬运自己洛谷上投的这题的题解,只不过没有被官方发布。 其实我已经有三篇题解是已经被展示啦(得意) 今天夜晚刚颓废完,想给自己的C++系列填个坑。这道题虽然是蓝题,但我感觉可以划到橙题蒟蒻言论 下面就是完全ctrl cv自己的博客内容啦! 从拿到这道题到AC它,花了三小时。。。太蒻了 蒟蒻自闭了 蒟蒻也是开始学的floyd算法,题解各位犇犇已经给出了大致过程,所以蒟蒻想向 还没学floy...

weixin_45961841的博客 3047

Linux中Hadoop 集群搭建

零、下载Hadoop: http://archive.cloudera.com/cdh5/cdh/5/?tdsourcetag=s_pctim_aiomsg 一、集群规划: 搭建的 hadoop 集群由 3 台服务器组成,分别叫做 master,salve1 和 slave2。其中 master 作为主节点,slave1 和 slave2 作为从节点。 二、网络配置: 1.查看 3 个节点的主机名...

白墨的小白博客 3992

洛谷P1119 灾后重建(Floyd)

题意: 有n个村庄,村庄间有m条公路,一次地震将连向每个村庄的公路损坏,所以要进行维修,后面有q个询问,问是在第几天的时候从x村庄到y村庄我们是否能到达,如果能到达的最小距离是多少。 典型的多源汇最短问题,我们要采用Floyd算法进行求解。 首先我们先了解一下什么事Floyd算法: g(i,j) 表示节点i到j最短路径的距离,对于每一个节点k,检查g(i,k) +g(k,j) 小于g(i,j) 如果成立,g(i,j) =g(i,k) +g(k,j);遍历每个k,每次更新的是除第k行和第k列.

qq_62224565的博客 694

基于C#的ASP.NET开发的党史学习网站课设

开展党史学习教育,就是要以史为镜、以史明志,把苦难辉煌的过去、日新月异的现在、光明宏大的未来贯通起来,在鉴往知来中砥砺前行,在乱云飞渡中把准航向,在凝心聚力中团结奋斗,共同创造新的历史伟业。登陆按钮与数据库进行连接,逻辑实现是如图3.1.3所示,自己定义一个SQL查询语句,将账号、密码放入SQL查询语句中,用sqlDataReader.HasRows语句进行逐一比较,找出结果,将用户名存入session并调用cookies,如果结果存在就关闭数据库,进行数据跳转,并弹出登陆成功的提示框,并关闭数据库。

m0_62408555的博客 974

如何使用ArcGIS自动矢量化建筑

在显示的重分类对话框内,输入栅格选择提取单波段后的栅格,重分类分为三个层级,旧值分别为100-249、250-251和252-255,对应新值为1、2和3,旧值的最小和最大值不用修改,保持和原有的一致。同样在ArcToolbox内点击Spatial Analyst工具点击“重分类\重分类”,在重分类对话框内输入栅格选择之前重分类过后的图片,将旧值3的新值设置为1,这样分类后就只有两类。在显示的新建Shapefile对话框内,名称命名为折线,要素类型选择折线,点击编辑,设置坐标系为WGS 1984。

2165

洛谷模板.Floyd的深度理解(python)

不考虑i==k和j==k的情况(毕竟如果相等,那么edge[i][j]任然等于w或者inf),现在i!=k,那么edge[i][j] = min(edge[i][j], edge[i][k] + edge[k][j]),取值为节点i到j的情况,和节点i到k到j的情况,这里我就简写,i-j 和 i-1-j。edge[i][j] = min(edge[i][j], edge[i][2] + edge[2][j]),这里面存在。的情况,只有这两个吗?如果i和j直接存在路径,那么edge[i][j] = w。

W_extend的博客 502

STM32 FOC电机控制:手把手教你用CubeMX配置TIM1中心对齐PWM(含代码避坑)

本文详细解析了STM32 FOC电机控制中TIM1中心对齐PWM的配置方法,涵盖CubeMX图形化设置、HAL库代码调用及常见问题排查。特别针对L6230Q驱动芯片的使能逻辑和死区时间配置提供实用指南,帮助开发者高效实现无刷电机的高性能控制。

weixin_27027459的博客 443

洛谷P1346电车题解(最短路Floyd)

洛谷P1346题解(最短路--floyd算法)

m0_73913888的博客 434

RK3568移植AP6256

本文主要是记录RK3568移植正基的AP6256的WIFIBT模块,感兴趣的朋友可以一起学习!!!提示:以下是本篇文章正文内容,下面案例可供参考。

qq_24093081的博客 3715

分立器件---电感介绍(7000字)

电感基础整理

HW-BASE的博客 2352

洛谷 P1613 跑路 Floyd

floyd预处理

qq_45554473的博客 457

国科大学习资料--模式识别与机器学习(黄庆明)--2020期末考试题

国科大学习资料–模式识别与机器学习(黄庆明)–2020期末考试题 国科大学习资料–模式识别与机器学习(黄庆明)–2020期末考试题 国科大学习资料–模式识别与机器学习(黄庆明)–2020期末考试题 ============================================================================================================================================================

无名何许人的博客 2608

【Floyd算法】全源最短路算法 洛谷P3647模板例题讲解

Floyd算法讲解,洛谷P3647模板含代码详解 全源最短路 图论

wayua的博客 1426

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

洛谷题解 P1037 [NOIP2002 普及组] 产生数(佛洛依德+高精度)

真的好久没有写洛谷的题解,原因就是不会真的好难这个搜索,好多的代码连看都看不明白。干干巴巴的看明白了一个题就连忙发一个题解吧! 链接: https://www.luogu.com.cn/problem/P1037 题目: 题目就是给你一个数,然后给你一个n对数,代表每一个0到9 的数可以替换成另一个0到9的数,最后求一共能够形成多少种不同数 这个题吧,应该是用搜索来做,救出每一个数可以有几种变形,在根据原来的数求出最后的结果,但是在看题解的时候发现,有一个 Floyd 的算法,索性就看了看感觉还挺简单,刚

qq_51769081的博客 1500

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

洛谷【模板】单源最短路径

洛谷【模板】单源最短路径

qq_17807067的博客 887

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

洛谷P1037 [NOIP2002 普及组] 产生数

【代码】洛谷P1037 [NOIP2002 普及组] 产生数。

oguri_cap的博客 444

最短路(1)——Floyd算法//洛谷2910

第一行国际惯例——咕咕咕。 1.floyd算法原理是动态规划 2.时间复杂度是O(n^3)(n是点的个数 3.适用于点比较少的情况 4.适用于多源最短路(跑完floyd后直接输出数组即可得到从x到y的最短路 本代码以洛谷2910为例 与普通模板不同的是,2910多了一个规定路径,只需累加即可。 #include <iostream> #include <cstdio> #i...

MoonLight_月亮 787

(笔记整理未完成)【图论】Floyd-Warshall算法

学习图论Floyd算法,Floyd算法虽然时间复杂度很大,但是很多条件都适用

gzkeylucky的博客 739

P1135 奇怪的电梯(Java)

大楼的每一层楼都可以停电梯,而且第 𝑖i 层楼(1≤𝑖≤𝑁1≤i≤N)上有一个数字 𝐾𝑖Ki​(0≤𝐾𝑖≤𝑁0≤Ki​≤N)。例如: 3,3,1,2,53,3,1,2,5 代表了 𝐾𝑖Ki​(𝐾1=3K1​=3,𝐾2=3K2​=3,……),从 11 楼开始。第一行为三个用空格隔开的正整数,表示 𝑁,𝐴,𝐵N,A,B(1≤𝑁≤2001≤N≤200,1≤𝐴,𝐵≤𝑁1≤A,B≤N)。对于 100%100% 的数据,1≤𝑁≤2001≤N≤200,1≤𝐴,𝐵≤𝑁1≤A,B≤N,0≤𝐾𝑖≤𝑁0≤Ki​≤N。

loongnoy的博客 542

【洛谷】P1690 贪婪的Copy(floyd+暴力路径,简单拿捏)

写图论题已经习惯先看一眼题解,基本可以筛选出或者排除一些算法 嗯....滑啊滑...n

m0_74969835的博客 396

洛谷 B3647:【模板】Floyd 算法

本题数据中可能存在重边,若不处理,会有一个样例不过。 若有重边,处理方法是只保留权值最小的那条边。

hnjzsyjyj的专栏 1195

洛谷上的好题一道P1037 [NOIP2002 普及组] 产生数

非常菜,中间下载了一次测试点才发现要用高精,写的不好代码可以参考,因为题主真的很菜。也是应学长要求建立自己的题单= =。感觉写博客不会丢失吧。经典DFS+高精乘法。

Trust_food的博客 267

洛谷 P1037 产生数 题解

此题有两种解法:图论或者BFS 两种方法都讲一下 本人太菜,BFS超时,所以先讲图论 解法一:图论 直接上代码: for(int i=0;i<n;i++) //for 1 to n 也行 { cin>>x>>y;//读进来规则 假设读进来2 5 GA[x][y]=1;//2行5列打个勾,表示2能变5。(把GA做成bool也行) } for(int k=1;k<=9;k++)//k是中间人 for(int i=0;i

睡神的博客 871

洛谷-1037 产生数

题目链接 思路 首先这题n 用l[i][j]表示i能不能转换成j,比如1→2,2→3,那么1→3。 可以用floyed算法实现。 然后,只需要把每个位上对应的数可以转换的数量相乘就可以了。我们可以用p[i]表示i这个数能够变成几个数。 样例输入: 234 2 2 5 3 6 样例输出: 4 2能变成5,3能变成6 那么2一共能变成两个数,2和5 3一共能变成两个数,

Ajwallet 616

【洛谷 P1037】[NOIP2002 普及组] 产生数 题解(图论+深度优先搜索+排列组合+高精度)

给出一个整数n和k个变换规则。n234k2。2⟶53⟶6上面的整数234234534264564共4种不同的产生数。现在给出一个整数n和k个规则。求出经过任意次的变换(0次或多次),能产生出多少个不同整数。仅要求输出个数。

HEX9CF的技术博客 825
上一篇: 51nod 2650 最短缩减路径 (拆点最短路)
下一篇: 无向图的最小环问题 (Floyd算法)
.SAI.
博客等级 码龄5年 835粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值