kuangbin专题八 URAL1627 Join(生成树计数)

2024-02-02 08:38

本文主要是介绍kuangbin专题八 URAL1627 Join(生成树计数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:
给出一个图,’.’表示卧室,’*’表示储藏间,每个格子上下左右都有一堵墙,然后需要打通一些卧室的墙(只能是相邻房间才能打通)使得卧室之间联通的方案数.
给每个卧室编个号,给可以打通的卧室加边,就是裸的生成树计数了.
题解:
打通一些卧室的墙之后,卧室之间就会变成一棵树,那么我们只要计算生成树的方案数就好了,怎么做呢,给每个卧室编个号,然后就是计算他们的联通边,写出邻接矩阵,然后弄个生成树计算模板就可以算出来结果了。
题外话:
ORZ,晚上和第二天早上一直超时和WA就是不知道为什么错误了,看了几个博客我看了都是差不多的啊,为什么超时了,为什么错了,最后改者改着发现了很多小问题,比如为什么超时呢?这道题的超时可能是因为你没弄long long int ,还有就是你的点数问题,不能只是10*10的矩阵,应该是100*100的矩阵,因为你原本的图最多可以有81个’.’也就是说最多有81个点,那么你如何是10*10的矩阵就算不出结果了,导致各种错误,还有最倒霉的就是我TM之前用的模板是错的!麻痹只能过一些题,还好做的这道题让我知道我的模板是错误的,不然就TM尴尬了。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
#define LL long long int
const int MAXN=111;
const LL mod=1e9;
char s[MAXN][MAXN];
int map[MAXN][MAXN];
LL B[MAXN][MAXN];
int g[4][2]={1,0,-1,0,0,1,0,-1};
int id[MAXN][MAXN];
int tol;
LL determinant(int n)
{LL res=1;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){while(B[j][i]){LL t=B[i][i]/B[j][i];for(int k=i;k<n;k++){B[i][k]=(B[i][k]-B[j][k]*t%mod+mod)%mod;swap(B[i][k],B[j][k]);}res=-res;}}if(!B[i][i])    return 0;res=res*B[i][i]%mod;}return (res+mod)%mod;
} 
int main()
{int n,m;while(~scanf("%d%d",&n,&m)){tol=0;memset(id,0,sizeof(id));memset(B,0,sizeof(B));for(int i=0;i<n;i++){scanf("%s",&s[i]);for(int j=0;j<m;j++)if(s[i][j]=='.')id[i][j]=tol++;}for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(s[i][j]=='.')for(int k=0;k<4;k++){int x=i+g[k][0];int y=j+g[k][1];if(x<0||x>=n||y<0||y>=m||s[x][y]=='*')continue;B[id[i][j]][id[i][j]]++;B[id[i][j]][id[x][y]]=-1;}}}tol=tol-1;LL ans=determinant(tol); printf("%lld\n",ans);}
} 

这篇关于kuangbin专题八 URAL1627 Join(生成树计数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670123

相关文章

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

java String.join()的使用小结

《javaString.join()的使用小结》String.join()是Java8引入的一个实用方法,用于将多个字符串按照指定分隔符连接成一个字符串,本文主要介绍了javaString.join... 目录1. 方法定义2. 基本用法2.1 拼接多个字符串2.2 拼接集合中的字符串3. 使用场景和示例3

C/C++随机数生成的五种方法

《C/C++随机数生成的五种方法》C++作为一种古老的编程语言,其随机数生成的方法已经经历了多次的变革,早期的C++版本使用的是rand()函数和RAND_MAX常量,这种方法虽然简单,但并不总是提供... 目录C/C++ 随机数生成方法1. 使用 rand() 和 srand()2. 使用 <random

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码