產生樹計數問題(SPOJ 104 Highways)

  周冬的《產生樹的計數及其應用》論文上講到過產生樹計數的問題。用到的是一個Kirchhoff矩陣,它是這樣定義的:a、設一個度數矩陣D,當i == j時,Dij = (i這個節點的度數),否則Dij = 0;b、設一個連通性矩陣A,如果i 和j連通,則Aij等於i到j的邊數,否則Aij等於0;Kirchhoff矩陣C = D -

SRM遇到的一個數論技巧——最大公約數和最小公倍數的關係

最大公約數L和最小公倍數G的關係:1、L%G == 0;2、設A, B的最大公約數為G, 最小公倍數為L,則:L/G = (A/G)*(B/G)3、gcd(A/G, B/G) = 1;  題目:給出一對數A, B 的最大公約數G, 最小公倍數L。這裡A, B有多種組合。,求A,B的一種組合使得A + B最小。如果沒有則輸出-1(SRM535 div2 500pt)(G <= 10^12, L<=10^12)猛的一看資料很大。不過用上前邊的定理就可以解決了。領X  = L/G;枚舉A/

最小樹形圖(朱-劉演算法)

  定義:一個有向圖,存在從某個點開始的到達所有的的一個最小產生樹,則它就是最小樹形圖。從早晨到現在一直在翻資料,終於理解了一點。朱-劉演算法的大概過程如下:1、找到除了root以為其他點的權值最小的入邊。用In[i]記錄2、如果出現除了root以為存在其他孤立的點,則不存在最小樹形圖。3、找到圖中所有的環,並對環進行縮點,重新編號。4、更新其他點到環上的點的距離,如:環中的點有(Vk1,Vk2,…

POJ_1837 Balance (dp)

  我沙茶了,看了半天沒看懂範例!後來問別人才知道。然後卑鄙,下流,無恥的看了別人的思路。無語了。思路:dp[i][j],表示前i件物品掛上以後偏倚量為j時的情況數。總情況數為15*20*25 = 7500。所以dp[i:1~20][j:-7500 ~ 7500],可以用dp[i][j:0~15000];My Code:View Code 1 #include <iostream> 2 #include <cstdio> 3 #include

HDU_3062 Party (2-SAT)

  2-SAT水題,還wa了好幾次,可見本菜更水。。。課件上都有講解。。。渣代碼:View Code #include <iostream>#include <cstring>#include <cstdio>#include <stack>using namespace std;const int N = 2012;const int M = 1000000;struct node {int to;int next;} g[M];int

RMQ 學習筆記

轉載自:http://hi.baidu.com/diannaochina/blog/item/48dfff33c3c36840ad4b5fb5.html一、最近公用祖先(Least Common Ancestors)對於有根樹T的兩個結點u、v,最近公用祖先LCA(T,u,v)表示一個結點x,滿足x是u、v的祖先且x的深度儘可能大。另一種理解方式是把T理解為一個無向無環圖,而LCA(T,u,v)即u到v的最短路上深度最小的點。這裡給出一個LCA的例子:例一對於T=<V,E>V={1,

HDU 4305 Lightning (高斯消元解kirchhoff矩陣+逆元)

   題意是:給一些座標點,如果兩點之間的距離小於R,並且兩點之間沒有其他點,則這兩個點保持連通,這樣構成了一個圖。問這個圖中產生樹的個數。因為資料量並不大,O(N^3)的建圖沒有問題。建好圖以後就可以用kirchhoff矩陣計算產生樹的個數,之所以寫這道題的解題報告是因為在高斯消元解kirchhoff矩陣時,需要用到逆元。(a/b)% mod,如果a,b的範圍很大,結果會有很大的誤差,這裡可以轉換一下 b*x = 1(% mod)則x為b的逆元 (a/b)%mod =

POJ_1276 Cash Machine (多重背包)

  又是幾天不做題,一個二進位最佳化的多重背包讓我寫的狗屁不通,錯漏百出!TLE, WA了好幾次,都是細節啊。思路,很裸的多重背包。My Code:  1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 const int N = 100010; 8 const int M = 1024; 9 10 int f[N];11

歐幾裡德演算法和擴充歐幾裡德演算法

  歐幾裡德演算法也就是一般說的輾轉相除法。代碼架構如下:int gcd(int a, int b) {return b ? gcd(b, a%b) : a;}粗數量級估計需要進行O(log b)次整數運算。實際上,當n固定後gcd(m, n)的平均迭代次數(m <= n)近視為(12*ln2 / π2)*ln(n)  。(不知道怎麼證明的-_-!)  擴充歐幾裡德演算法  設gcd(a, b) = d,則存在正整數x, y滿足ax + by = d。演算法架構int x, y;int

POJ 1001 Exponentiation (記第一道Java水過的題)

  妹的!java些高精度相當與玩cs開外掛!電腦裝上java很久了,一直只會寫寫a + b 玩,今天心血來潮找個高精度來玩玩。^ ^import java.io.*;import java.util.*;import java.math.*;public class Main { public static void main(String [] args) throws IOException { Scanner cin = new Scanner (new

堆排序的實現

代碼+注釋:#include <stdio.h>#define N 10000int num[N], a[N];void heap_adjust(int x, int y){int i = x, tmp = num[x];int j = i<<1; //j左移一位,即i*2 while(j <= y) //當未超過堆底時 {if(j < y && num[j+1] < num[j]) j++;

SRM 551 div2

錯過了。。。當練習做的。250pt 略 500pt怎麼開始就沒敢寫暴力呢。。。。看別人的思路,挺巧妙的。Orzclass ColorfulChocolates {public: int maximumSpread(string c, int m) { int l = c.length(), i, j, num, cnt; int s[3000]; int sum, ans = 0, res; REP(i, l) {

次小產生樹

  又是產生樹問題。。。次小產生樹,顧名思義就是比最小稍微大那麼一點點的產生樹,^_^方法是:1、找到最小產生樹,值為mst2、最小產生樹種的點:找到每一個點到其它點的路徑上的最大邊權值 dp[i][j]表示i到j路徑上的最大邊權值3、加一條不在最小產生樹上的邊。比如i - k,同時刪除在最小產生樹上i -> k路徑上最大的一個邊權值dp[i][k]; 這樣會得到 new_mst,在這些new_mst中找一個最小的,就是次小產生樹的值實現上用到一些技巧,代碼如下POJ

Treap的插入刪除實現

詳見:隨機平衡二叉尋找樹Treap的分析與應用 #include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>#define CL(arr, val) memset(arr, val, sizeof(arr))#define REP(i, n) for(i = 0; i < n;

POJ_2184 Cow Exhibition (0-1背包)

  /*題意很清楚。思路大概是:設dp[i]表示sum(s[x]) = i 時dp[i] = sum(f[x])取到最大。所得的i + dp[i]就是結果。因為s[i]有負的。所以0座標位置移動一下。dp[i]初始化為 -∞。0坐標位置為dp[MID] = 0;*///主要代碼:for(i = 0; i < n; i++) {if(s[i] <= 0 && f[i] <= 0) continue;if(s[i] > 0) {for(j = M; j

鴿巢原理 學習筆記

文章目錄 鴿巢定理的簡單形式鴿巢原理的加強形式 鴿巢定理的簡單形式  鴿巢原理(抽屜原理):如果有n+1個鴿子要進n個鴿巢,則至少存在一個鴿巢種包含兩個或更多的鴿子。看上去是一句“廢話”,不過這句”廢話“在用來證明一個排列或則某種現象的存在性上相當有魅力!關於鴿巢原理更抽象的表述:• If X has more elements than Y, then f is not one-to-one.• If X and Y have the

無向圖、有向圖的最小環

  大概的思路是線封死一條邊i -> j,再找i到j的最短路dis[i][j]。dis[i][j] + w[i][j]就是一個環。找到所有環裡的最小值就能得到最小環。不過。。。用dijkstra算單源最短路的話,這個的時間雜度是O(n^4);所以可以用floyd將時間複雜度控制在O(n^3)上。思路是在floyd演算法進行鬆弛的時候就找這個最小環。ans = min(ans, dis[i][j] + w[i][k] + w[k][j]); 這樣  k -> i - >....

HDU 多校聯合第六場

uestc的題。。。果然,題意都弄得這麼晦澀。01推個規律,mod r。偶推錯了。。。1個小時才過。06三分做的。還是不知道怎麼證明他是凹函數,話說。。以為神人想當然的說這是凹函數。。。怎麼證明?管他呢,真沒勁!08話說偶已經推出來s1的和sum1,s2的和sum2。sum1 -

二分圖與匹配

  二分圖:    二分圖G指的是一種圖,其所有的定點分成兩個集合X 和 Y,其中X或Y在各自集合種的任意兩個點都不相連,而分別在X 和Y 種的兩個定點可以構成邊。 X = {1, 2, 3}  Y = {4, 5, 6, 7}圖可以表示為 G = (V, E), 其中 V = X υ Y。  匹配:  二分圖G的匹配M 是指邊集合E的子集M,

SDUT_1743 最優合并問題

最優合并問題Time Limit:1000MS  Memory Limit:65536KTotal Submit:19 Accepted:8Description給定k 個排好序的序列s1 , s2,……, sk , 用2 路合并演算法將這k 個序列合并成一個序列。假設所採用的2 路合并演算法合并2 個長度分別為m和n的序列需要m + n

總頁數: 61357 1 .... 9422 9423 9424 9425 9426 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.