bzoj 1002[FJOI2007]轮状病毒
2015-04-15 19:58
239 查看
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1002
题解:求给出图的生成树数目
关于生成树数目的计算:http://www.cnblogs.com/shjwudp/articles/4339068.html
这题有很坑,答案会爆longlong,用了java写的
bzoj 1002
题解:求给出图的生成树数目
关于生成树数目的计算:http://www.cnblogs.com/shjwudp/articles/4339068.html
这题有很坑,答案会爆longlong,用了java写的
/* * Problem: BZOJ 1002 * Author: SHJWUDP * Created Time: 2015/4/15 星期三 19:24:14 * File Name: Main.java * State: Accepted * Memo: Matrix-Tree */ import java.util.*; import java.io.*; import java.math.*; public class Main { public static void main(String args[]) throws IOException { InputStream inputStream = System.in; OutputStream outputStream = System.out; InputReader in = new InputReader(inputStream); PrintWriter out = new PrintWriter(outputStream); TaskA solver = new TaskA(); solver.solve(in, out); out.close(); } } class TaskA { public void solve(InputReader in, PrintWriter out) { int n=in.nextInt(); if(n<=1) { out.print(1+"\n"); return ; } int[][] D=new int[n+1][n+1]; int[][] A=new int[n+1][n+1]; D =n; for(int i=0; i<n; i++) D[i][i]=3; for(int i=0; i<n; i++) { A[i] =A [i]=1; int r=(i+1)%n; A[i][r]=A[r][i]=1; } BigInteger[][] C=new BigInteger[n+1][n+1]; for(int i=0; i<=n; i++) { for(int j=0; j<=n; j++) { C[i][j]=BigInteger.valueOf(D[i][j]-A[i][j]); } } //计算C的m-1阶行列式 (m=n+1) BigInteger ans=BigInteger.ONE; for(int i=0; i<n; i++) { for(int j=i+1; j<n; j++) while(C[j][i]!=BigInteger.ZERO) { BigInteger t=C[i][i].divide(C[j][i]); for(int k=i; k<n; k++) { C[i][k]=C[i][k].subtract(C[j][k].multiply(t)); } for(int k=i; k<n; k++) { BigInteger tmp=C[i][k]; C[i][k]=C[j][k]; C[j][k]=tmp; } ans=ans.negate(); } ans=ans.multiply(C[i][i]); } if(ans.compareTo(BigInteger.ZERO)<0) ans=ans.negate(); out.print(ans+"\n"); } } class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next() { while(tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public BigInteger nextBigInt() { return new BigInteger(next()); } }
bzoj 1002
相关文章推荐
- 【bzoj 1002】[FJOI2007]轮状病毒
- 【BZOJ 1002】 [FJOI2007]轮状病毒 【矩阵树定理】【留坑】
- BZOJ 1002 [FJOI2007] 轮状病毒
- 【bzoj1002】【FJOI2007】【轮状病毒】【找规律】
- 【BZOJ 1002】: [FJOI2007]轮状病毒
- [bzoj1002][FJOI2007]轮状病毒_递推_高精度
- bzoj1002【fjoi2007】轮状病毒
- Bzoj1002 [FJOI2007]轮状病毒
- BZOJ 1002: [FJOI2007]轮状病毒【生成树的计数与基尔霍夫矩阵简单讲解+高精度】
- [bzoj] 1002: [FJOI2007]轮状病毒
- [bzoj1002][FJOI2007]轮状病毒【高精度】【矩阵树定理】
- bzoj 1002: [FJOI2007]轮状病毒
- BZOJ1002 [FJOI2007]轮状病毒
- 【FJOI2007】bzoj1002 轮状病毒
- 【BZOJ1002】【FJOI2007】轮状病毒
- BZOJ1002: [FJOI2007]轮状病毒
- BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度
- BZOJ 1002: [FJOI2007]轮状病毒
- [高精度][BZOJ1002][FJOI2007]轮状病毒
- bzoj1002[FJOI2007]轮状病毒