原创 SPFA+Dijkstra+Floyd Java模板

SPFA import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; pu

原创 POJ-2299 樹狀數組+離散化

思路 記錄每個數對應升序的下標,記錄每個數先將數據離散化。 倒着插入每個數,計算該位置前的已經插入的數。 import java.util.Arrays; import java.util.Scanner; public c

原创 Prime+Kruskal Java模板

Prime import java.util.Scanner; public class Prime { static int[][] G = new int[1000][1000]; static int n,ans;

原创 HDU-1394 線段樹+逆序數

思路 查詢該數到n已經插入的個數,再單點更新該數sum[root]=1,最後求出所有的逆序數的個數。 每次換到後面,說明小於a[i]有a[i]個數 大於a[i]有n-a[i]-1個數 說明少了有a[i]個逆序數 多了n-a

原创 HDU-1540 樹狀數組+二分查找 Java

個人覺得用樹狀數組更容易理解,詢問一個點有多少個連接的點,就找到右邊被摧毀的點R和左邊被摧毀的點L,最終結果爲R-L-1. import java.util.Arrays; import java.util.Scanner;

原创 POJ-2531 dfs+剪枝

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamT

原创 POJ-1661 dp

狀態轉移就是從上一個平臺到下一個平臺有兩種方法,從左端點到下一個平臺和從右端點到下一個平臺,dp[0][i]表示到第i個平臺左端點最小時間,dp[1][i]表示到第i個平臺右端點最小時間。 求dp也可以正向求和反向求 import

原创 HDU-2159 二維完全揹包

數組dp[j][l]記錄經驗值,j表示忍耐值,l表示殺怪的個數,狀態轉移方程dp[j][l] = Math.max(dp[j][l],dp[j-b[i]][l-1]+a[i]) import java.util.Arrays; i

原创 HDU-5869 樹狀數組+離線+預處理

思路講的很詳細的博客 預處理求區間[l,r]的gcd,固定r向左 如[1,3]->[3,3]->[2,3]->[1,2,3]這樣才保證了求出了所有的區間內所有的gcd import java.io.BufferedReader;

原创 POJ-2823 單調隊列

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWr

原创 HDU-2795 線段樹

由於題目給的公告數最多是200000,所以最多也就用200000行。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.

原创 ZOJ-1610 線段樹區間染色

還注意的是建樹每次都是[1,8000]。 import java.util.Arrays; import java.util.Scanner; public class Main_ZOJ1610 { static int[]

原创 POJ-1988 帶權並查集 Java

由於形成的不是樹,所以不能用向量法找關係。 用sum數組來維護i堆有幾個立方體,所以x移到y上去就會有r[fx] = sum[fy]表示根節點fx節點下有sum[fy]個立方體,再更新sum[fy] += sum[fx]. pac

原创 POJ-3026 bfs+最小生成樹 Java

枚舉’A’和’S’到其他的點建立邊,用bfs搜索權值。 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import j

原创 POJ-1733(Java) 帶權並查集+離散化

import java.util.Arrays; import java.util.Scanner; public class Main_POJ1733 { static int[] id = new int[10005];