http://acm.timus.ru/problem.aspx?space=1&num=1627

给一个无向图,问可以有多少生成树

参照     周冬《生成树的计数及其应用》

代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner; class Fraction {
public BigInteger x;
public BigInteger y; public Fraction(int xx, int yy) {
x = BigInteger.valueOf(xx);
y = BigInteger.valueOf(yy);
} static public BigInteger gcd(BigInteger x, BigInteger y) { if (x.mod(y).compareTo(BigInteger.ZERO) == 0) {
return y;
} else {
return gcd(y, x.mod(y));
}
} public Fraction add(Fraction f) {
Fraction ff = new Fraction(0, 1);
ff.y = this.y.multiply(f.y);
ff.x = this.x.multiply(f.y).add(this.y.multiply(f.x));
BigInteger z = Fraction.gcd(ff.x, ff.y);
ff.x = ff.x.divide(z);
ff.y = ff.y.divide(z);
return ff;
} public Fraction subtract(Fraction f) {
Fraction ff = new Fraction(0, 1);
ff.y = this.y.multiply(f.y);
ff.x = this.x.multiply(f.y).subtract(this.y.multiply(f.x));
BigInteger z = Fraction.gcd(ff.x, ff.y);
ff.x = ff.x.divide(z);
ff.y = ff.y.divide(z);
return ff;
} public Fraction multiply(Fraction f) {
Fraction ff = new Fraction(0, 1);
ff.y = this.y.multiply(f.y);
ff.x = this.x.multiply(f.x);
BigInteger z = Fraction.gcd(ff.x, ff.y);
ff.x = ff.x.divide(z);
ff.y = ff.y.divide(z);
return ff;
} public Fraction divide(Fraction f) {
Fraction ff = new Fraction(0, 1);
ff.y = this.y.multiply(f.x);
ff.x = this.x.multiply(f.y);
BigInteger z = Fraction.gcd(ff.x, ff.y);
ff.x = ff.x.divide(z);
ff.y = ff.y.divide(z);
if (ff.y.compareTo(BigInteger.ZERO) < 0) {
ff.y = ff.y.abs();
ff.x = ff.x.multiply(BigInteger.valueOf(-1L));
}
return ff;
} public boolean equals(Fraction f) {
if (this.x.equals(f.x) && this.y .equals(f.y)) {
return true;
}
return false;
} } public class Main { /**
* @param args
* @throws FileNotFoundException
*/
public static int N = 100; public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
Fraction[][] a = new Fraction[N][N]; for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
a[i][j] = new Fraction(0, 1);
}
}
int[][] k = new int[N][N];
int[] X = { 0, 0, -1, 1 };
int[] Y = { 1, -1, 0, 0 }; int n = in.nextInt();
int m = in.nextInt();
int ln = 0;
for (int i = 0; i < n; ++i) {
String s = in.next();
for (int j = 0; j < m; ++j) {
if (s.charAt(j) == '.') {
k[i][j] = (++ln);
}
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (k[i][j] > 0) {
for (int w = 0; w < 4; ++w) {
int x = i + X[w];
int y = j + Y[w];
if (x >= 0 && x < n && y >= 0 && y < m && k[x][y] > 0) {
a[k[i][j]][k[x][y]] = new Fraction(-1, 1);
a[k[i][j]][k[i][j]] = a[k[i][j]][k[i][j]]
.add(new Fraction(1, 1));
}
}
}
}
}
if (ln > 1) {
System.out.println(valueOfMatrix(a, ln - 1));
}else{
System.out.println(1);
}
} public static BigInteger valueOfMatrix(Fraction[][] a, int n) {
// TODO Auto-generated method stub
BigInteger MOD = BigInteger.valueOf(1000000000L);
dfs(a, n);
Fraction v = new Fraction(1, 1);
for (int i = 1; i <= n; ++i) {
v = v.multiply(a[i][i]);
}
return v.x.mod(MOD);
} public static void dfs(Fraction[][] a, int n) {
if (n == 1)
return;
int l = n;
Fraction fractionZORE = new Fraction(0, 1);
while (l >= 1 && a[l][n].equals(fractionZORE)) {
--l;
}
if (l < 1) {
dfs(a, n - 1);
} else {
if (l < n) {
for (int j = 1; j <= n; ++j) {
Fraction z = a[l][j];
a[l][j] = a[n][j];
a[n][j] = z;
}
} for (int i = 1; i < n; ++i) {
if (!a[i][n].equals(fractionZORE)) {
Fraction z = a[i][n].divide(a[n][n]);
for (int j = 1; j <= n; ++j) {
a[i][j] = a[i][j].subtract(a[n][j].multiply(z));
}
}
}
dfs(a, n - 1);
}
} }

  

1627. Join的更多相关文章

  1. KUANGBIN带你飞

    KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题    //201 ...

  2. kuangbin带你飞 生成树专题 : 次小生成树; 最小树形图;生成树计数

    第一个部分 前4题 次小生成树 算法:首先如果生成了最小生成树,那么这些树上的所有的边都进行标记.标记为树边. 接下来进行枚举,枚举任意一条不在MST上的边,如果加入这条边,那么肯定会在这棵树上形成一 ...

  3. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...

  4. ACM--[kuangbin带你飞]--专题1-23

    专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 FliptilePOJ 1426 Find T ...

  5. URAL - 1627:Join (生成树计数)

    Join 题目链接:https://vjudge.net/problem/URAL-1627 Description: Businessman Petya recently bought a new ...

  6. SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)

    前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...

  7. SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

    前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. ...

  8. Nested Loops join时显示no join predicate原因分析以及解决办法

    本文出处:http://www.cnblogs.com/wy123/p/6238844.html 最近遇到一个存储过程在某些特殊的情况下,效率极其低效, 至于底下到什么程度我现在都没有一个确切的数据, ...

  9. c# Enumerable中Aggregate和Join的使用

    参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaochen ...

随机推荐

  1. docker设置并运行部分命令及原文

    1.设置开机启动 If you want Docker to start at boot, you should also: $ sudo systemctl enable docker 2. 启动, ...

  2. Attribute

    Attribute介绍 咱们来说Attribute,他是一个类,所以自定义的Attribute都是继承自System.Attribute,一般命名的时候都是以Attribute结尾.在使用的时候我们可 ...

  3. mysql事务处理

    事务处理能保证所有的sql操作一次性完成或回滚,mysql默认的MyISAM表类型是不支持事务处理的,如果需要做事务处理,需要把表类型换成InnoDB <?php $dsn='mysql:hos ...

  4. appium 等待方法 转

    前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html   知乎Android客户端登陆:htt ...

  5. Vim插件管理器Vundle使用

    参考地址:http://www.linuxidc.com/Linux/2012-12/75684.htm Vundle(Vim bundle) 是一个vim的插件管理器. 其Github地址为: ht ...

  6. 我的Time

    C++改本地时间 #include<iostream> #include<windows.h> using namespace std; void main() { //tim ...

  7. RedHat下安装Telnet服务端及客户端远程连接配置

    Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力. 配置之前请确保网络连通,如防火墙影响连接,请先关 ...

  8. selenium提供了三种模式的断言:assert,verify,waitfor

    Assert:失败时,该测试将终止 Verify:失败时,该测试继续执行,并将错误日志记录在日显示屏 Waitfor:等待某些条件变为真,一般使用在AJAX应用程序的测试 断言常用的有,具体见如下:a ...

  9. 查看Linux是32位还是64位

    最直接简洁的办法: 在linux终端输入getconf LONG_BIT命令 如果是32位机器,则结果为32 [root@localhost ~]# getconf LONG_BIT 32 如果是64 ...

  10. SpringMVC文件上传注意事项

    简介 我在使用 idea 上传文件时遇到一些问题,费了好些时间,最后还是的队友来帮忙. 问题出现在没有熟练使用 IDE,采用 SpringMVC 上传文件主要注意几个事项. 1. 配置 bean 在 ...