原创 CodeForces 160D Edges in MST 題解

[題意]       給出一個n個點m條邊的無向連通圖,判斷圖中每條邊是否一定在最小生成樹上.      n,m<=100000. [思路] 由於最小生成樹的性質,我們造出任意一棵最小生成樹,並記錄下與最小生成樹權值相等的所有邊. 暴力

原创 BZOJ2792/POI2012 Well

Task 給出n個正整數X1,X2,…Xn,可以進行不超過m次操作,每次操作選擇一個非零的Xi,並將它減一。 最終要求存在某個k滿足Xk=0,並且z=max{|Xi - Xi+1|}最小。輸出最小的z和此時最小的k。 1<=

原创 維修道路 題解

[題意] 一棵n個節點的樹,求兩條路徑s1,s2最大的長度積,滿足s1,s2都是兩點之間的最短路徑,而且兩條路徑不含任何公共點.(n<=3000). [思路]      O(n^2):          枚舉樹上的每條邊,把此邊從樹上移

原创 BZOj2790/POI2012 Distance

Task 對於兩個正整數a、b,這樣定義函數d(a,b):每次操作可以選擇一個質數p,將a變成a*p或a/p, 如果選擇變成a/p就要保證p是a的約數,d(a,b)表示將a變成b所需的最少操作次數。例如d(69,42)=3。

原创 BZOJ3060/POI 2012 Tour de Byteotia

Task   給定一個n個點m條邊的無向圖,問最少刪掉多少條邊能使得編號小於等於k的點都不在環上。   1 ≤ n ≤ 1,000,000,1 ≤ m ≤ 2,000,000,1 ≤ k ≤ n。 Solution   對於

原创 Since150713的HelloWorld!!!

聽說第一篇文章都很重要... 但我認爲...此處無聲勝有聲...<( ̄︶ ̄)> 請不要問我問什麼隔了一年纔開始寫博客....................╭(╯^╰)╮ 點贊 2 收藏 分享 文章

原创 USACO2011Open Bronze 3lines 題解

[思路] 符合 FJ的要求有兩種情況:三條直線平行或者兩條直線平行並與一條直線垂直.至於橫豎的問題,可以通過反轉奶牛的座標轉化成相同的方式. 三條平行直線: 把所有點的橫座標記錄下來,如果不同的橫座標個數小於等於3,那麼符合條件. 兩條平

原创 USACO2011Open Gold Bookshelf 題解

可以把題目理解爲在n本書中”切幾刀”.      當n<=2000時就是最裸的一維DP,O(n2)可以解決:      dp[i]表示在前i本書,第i本書爲當前書架的最後一本書的最小高度.dp[i]=min{dp[j]+mx[j+1,i]

原创 毯子 題解(COCI 2008-2009Final C)

[題意] N 塊矩形毯子鋪在地上。0秒時(0,0)處有一桶油倒了,然後開始流呀流,每秒往八個方向擴散一個單位。注意,這裏的座標描述一個單元格,不表示點。M個詢問,每次問一個時間點被油染到的毯子面積(若有毯子重疊,面積也要累加,如一個單位格

原创 USACO2011Open Gold Balanced Cow Subsets

N的範圍很小,可以聯想到枚舉子集和狀壓.但是如果直接枚舉兩個子集,顯然是不夠的.那麼我們可以聯想到折半枚舉!Meet inthe Middle!     把n個數分成兩部分A,B集合,答案子集的來源有以下幾種: 1.    A集合的子集.

原创 CodeForces 444B DZY Loves FFT 題解

[題意]      給出一個的1~n的排列A,和一個長度爲n,只有0,1的序列B,求序列C: Ci=max(aj,bi-j)(i<n,0<=j<=i)      數據保證是隨機構造的. [思路] 這題坑啊.不怕難題,就怕水題ToT   

原创 IOI2011 race

Task: 給定一棵帶權樹,求出邊數最小的一條路徑使得路徑長度爲K. 1 ≤ N ≤ 200000 ,1 ≤ K ≤ 1000000 Solution: 枚舉路徑的lca爲節點x,只考慮一定經過x的路徑.

原创 dfs序的常見用法整理

dfs序就是一棵樹在dfs遍歷時組成的節點序列. 它有這樣一個特點:一棵子樹的dfs序是一個區間.下面是dfs序的基本代碼: void dfs(int x,int pre,int d){//L,R表示一個子樹的範圍 L[x]=++

原创 BZOJ2791/POI2012 Rendezvous

Task 給定一個n個頂點的有向圖,每個頂點有且僅有一條出邊。 對於頂點i,記它的出邊爲(i, a[i])。再給出q組詢問,每組詢問由兩個頂點a、b組成,要求輸出滿足下面條件的x、y: 1. 從頂點a沿着出邊走x步和

原创 USACO2011Open Silver Running Laps題解

//請忽略我把牛看作羊.... 由題意,我們可以得到 t*vi-t*vj=kC.那麼i,j相遇的次數就是最大的k(整數).爲了得到最大的k就要使t最大,而tmax=L*C/vmax. 那麼 把式子整理得到:      k=L*(vi-vj