Time of Update: 2018-12-03
題意:股票經紀人之間傳遞謠言. 給出一個股票經紀人的聯絡網路: a聯絡到b用時w.求: 選擇哪一個人作為謠言的源頭可以使得謠言傳到所有人最快, 以及傳到所有人所用時間.思路:Floyd演算法可以求出全源最短路. 只要枚舉每一個源s, 記錄s到其他人的最大時間t, 比較t, 最小的那個對應的s即為所求.#include <cstdio>#include <cstring>using namespace std;const int INF =
Time of Update: 2018-12-03
參考:1. 郭華陽 - 算法合集之《RMQ與LCA問題》. 講得很清楚!2. http://www.cnblogs.com/lazycal/archive/2012/08/11/2633486.html3. 代碼來源yejinru題意:有一棵樹, 按照順序給出每條邊, 再給出若干對點, 這兩點之間的唯一的路( Simple path )上邊權加1. 當所有對點處理完後, 按照邊的輸入順序輸出每條邊的權.思路:LCA問題.最近公用祖先(Least Common
Time of Update: 2018-12-03
題意:求一個圖的割點. 輸入略特別: 先輸入圖中點的總數, 接下來每一行首先給出一個點u, 之後給出一系列與這個點相連的點(個數不定). 行數也不定, 用0作為終止.這樣的輸入還是要保證以數字讀入吧...gets沒前途的思路:割點的模板啦~#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 105;bool
Time of Update: 2018-12-03
題意:有棵蘋果樹,根節點編號為1.邊權為該邊上蘋果數. 問保留x條樹枝時, 能夠保留的最多蘋果數.思路:樹DP.令dp[ i ][ j ] 表示以 i 為根的子樹保留 j 條樹枝(包括 i 與其父節點相連的那一條在內)最多有多少蘋果.枚舉關於子樹的不同分配方案, 選擇最大的.樹DP的特殊之處就在於它的第一維的變化是沿著dfs的方向走的.#include <cstdio>#include <cstring>const int MAXN = 111;int n, m,
Time of Update: 2018-12-03
題意:求對一個圖補充最少的邊使得其成為強連通圖.思路:縮點是想到了,但是一是對"縮點"認識不夠清晰,統計入度出度的時候想著想著又想成了實際的"點",於是就糾結在"不連通的強連通分量沒有入度或出度為零的點",然後甚覺錯誤...其實啊,"shrink"的時候判斷的是一條邊兩邊的id是否相同,這已經是將強連通分量視為一個點了...一句話, 統計縮點之後的圖中入度為零的點的個數, 出度為零的點的個數, 取其大即為答案. 因為從葉子連到根的有向邊的條數不會超過這個數, 如果圖是不連通的,
Time of Update: 2018-12-03
finally一定會執行嗎?回答當然是否定的,假如在try裡執行了System.exit(0)就不會再去執行finally了,守護線程中的finally碰到非守護線程全部退出的時候也可能執行不到。又如下面的代碼,會列印什麼內容?public class Test { publicstatic void main(String... args)
Time of Update: 2018-12-03
Prim(添點法)1. 任選一點(一般選1), 作為切入點,設其與最小產生樹的距離為0(實際上就是選一個點,將此樹實體化),.2. 在所有未選擇的點中選出與最小產生樹距離最短的, 累計其距離, 並標為已選. 若都選擇了, 則得到了最小產生樹(的總路長).3. 更新與此點相鄰的點"與最小產生樹的距離".返回2.#include <cstdio>#include <cstring>#include <vector>#include
Time of Update: 2018-12-03
#include <iostream>#include <iomanip>#include <cmath>using namespace std;classShape{public:virtual float area(){return 0;}virtual float volume(){return 0;}virtual void shapeName()=0;};class Circle:public Shape{public:Circle(float r)
Time of Update: 2018-12-03
題意:求最小產生樹的邊長和.#include <cstdio>#include <vector>#include <algorithm>using namespace std;const int MAXN = 30;int f[MAXN];int n;typedef struct edge{ int u,v,w; edge(){} edge(int _u, int _v, int
Time of Update: 2018-12-03
在之前我做這道題時沒有看懂什麼意思,過了一段時間,終於解出來了。其實 ,這道題比較簡單,個人覺得題目描述不怎麼清楚。描述電腦科學中的一個基本問題是排序問題,對這個問題現在有許多解決方案,如排序演算法。一些排序演算法是簡單得可以靠直覺就得知的,如冒泡法排序。另外一些如堆排序就不這麼簡單了,但能迅速地得到排序結果。下面列出了一些排序的演算法,當然,在這兒不能告訴你如何執行他們,你必須自己掌握這些知識。 Bubble sort 冒泡排序 Heap sort 堆排序 Insertion
Time of Update: 2018-12-03
設有n=2^k個運動員要進行網球迴圈賽。現要設計一個滿足以下要求的比賽議程表: (1)每個選手必須與其他n-1個選手各賽一次; (2)每個選手一天只能參賽一次; (3)迴圈賽在n-1天內結束。 請按此要求將比賽議程表設計成有n行和n-1列的一個表。在表中的第i行,第j列處填入第i個選手在第j天所遇到的選手。其中1≤i≤n,1≤j≤n-1。
Time of Update: 2018-12-03
題意:...不多說注意:輸入是矩陣...有了並查集, 怎麼也不想寫Prim了....#include <cstdio>#include <vector>#include <algorithm>using namespace std;const int MAXN = 105;int f[MAXN];int n;typedef struct edge{ int u,v,w; edge(){} edge(int _u, int _v, int
Time of Update: 2018-12-03
描述寄居蟹與海葵是一對合作互助的共棲夥伴。海葵是寄居蟹最稱職的門衛。它用有毒的觸角去蜇那些敢來靠近它們的所有動物,保護寄居蟹。而寄居蟹則背著行動困難的海葵,四齣覓食,有福同享。但並不是所有寄居蟹和海葵都可以做搭檔的。那就要看海葵的身體是不是符合寄居蟹的螺殼。海葵的身體是有褶皺的,而寄居蟹的螺殼同樣凹凸不平,我們可以用一個大寫字母組成的字串來表示它們的高低程度,其中A代表0,B代表1,依次類推。我們稱兩者相加等於25的就算是吻合,比如A和Z相吻合,B與Y吻合,依次類推。只要海葵身體的部分序列與寄居
Time of Update: 2018-12-03
問題描述: 設有n=2^k個運動員要進行網球迴圈賽。現要設計一個滿足以下要求的比賽議程表: (1)每個選手必須與其他n-1個選手各賽一次; (2)每個選手一天只能參賽一次; (3)迴圈賽在n-1天內結束。 請按此要求將比賽議程表設計成有n行和n-1列的一個表。在表中的第i行,第j列處填入第i個選手在第j天所遇到的選手。其中1≤i≤n,1≤j≤n-1。8個選手的比賽議程表如:
Time of Update: 2018-12-03
題意:求出度為0的強連通分量.思路:縮點具體有兩種實現:1.遍曆所有邊, 邊的兩端點不在同一強連通分量的話, 將出發點所在強連通分量出度+1.#include <cstdio>#include <cstring>#include <stack>#include <algorithm>using namespace std;//0.03s 4856Kconst int MAXN = 5005;struct Pool{ int pre, v;}
Time of Update: 2018-12-03
題意:有一群牛, a會認為b很帥, 且這種認為是傳遞的. 問有多少頭牛被其他所有牛認為很帥~思路:關鍵就是分析出縮點之後的有向樹只能有一個葉子節點(出度為0).做法就是Tarjan之後縮點統計出度.#include <cstdio>#include <cstring>#include <stack>#include <algorithm>using namespace std;const int MAXN = 10005;const int
Time of Update: 2018-12-03
The calculation of GPATime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15014 Accepted Submission(s): 3504Problem Description每學期的期末,大家都會忙於計算自己的平均成績,這個成績對於評獎學金是直接有關的。國外大學都是計算GPA(grade point
Time of Update: 2018-12-03
題意:(當時沒看懂...)N個王子和N個女孩, 每個王子喜歡若干女孩. 給出每個王子喜歡的女孩編號, 再給出一種王子和女孩的完美匹配. 求每個王子分別可以和那些女孩結婚可以滿足最終每個王子都能找到一個自己喜歡的女孩結婚.(需要避免的情況就是某個王子和自己喜歡的某個女孩結婚之後使得最終無法找到一個完美匹配)思路:(非獨立思考想出...)將初始的每個完美匹配視為1個節點, u -> v表示u中的王子喜歡v中的女孩, 求這樣一個圖的強連通分量.
Time of Update: 2018-12-03
還是A+BTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13470 Accepted Submission(s): 6578Problem
Time of Update: 2018-12-03
割點bool iscut[N];int dfn[N], low[N], Index, n;void tarjan(int x) {///對於無向圖,只要連通,就是強連通! ///判斷割點呢,就是只要他所進入的強連通分量low全部滿足<=dfn[自己]就可以了 dfn[x] = low[x] = ++Index;///時間戳記和low for (int tmp = v[x], k; k = p[tmp].k, tmp; tmp = p[tmp].pre)