同構 定義 7-1.9 設圖 G=<V,E> 及圖 G′=<V′,E′> ,如果存在一一對應的映射 g : → 且 e =(,)(或<(,>)是G的一條邊若且唯若e′=(g (),g( ))(或<g() ,g ( ) >) 是 G ′ 的一條邊,則稱 G 與 G ′ 同構 ,記作 G ≌ G ′ 。 從這個定義可以看到,若 G與 G′同構,它的充要條件是:兩個圖的結點和邊分別存在著一一對應,且保持關聯關係,例 7-1.9 中,(a)
剛學圖同構,然後就找來做做。這題直接爆,因為題目只要求形狀相同,不要求節點一樣,所以可以枚舉0~n-1 總共n!個排列情況,直接next_permutation,懶得寫dfs,然後就亂搞。這裡memset竟然比for迴圈快!貌似是哦,規模那麼小。。。sb了=。=#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <
Nim遊戲 Nim遊戲是博弈論中最經典的模型(之一?),它又有著十分簡單的規則和無比優美的結論 Nim遊戲是組合遊戲(Combinatorial Games)的一種,準確來說,屬於“Impartial Combinatorial
題意:給出兩條平行線AB,CD,AB速度為p,CD速度為q,線段以外為r,問從A到D最短時間?方法:三分。簡單分析後發現這個函數是單峰函數,先減後增,三分適用;實現:先對AB三分,裡面嵌套著對CD三分;#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include
媽的,一開始看下去以為跟hdu 2846一樣,要處理子串。。。還傻b的用數組,結果MLE,本人最討厭指標啥的,以為省功夫,誰知道就這樣悲劇了!這就教訓我有些事情不能省得,要做足!還有,剛開始糾結於那8個浮點數怎麼處理,還來搜了一下,發現很簡單:先找出8個中最小值minm,然後minm/a[i],若值處在0.95/1.05<=x<=1.0就標記為0,否則就是1!#include <vector>#include <list>#include
題意是否存在多棵樹,它們的根形成一個環,簡單來說就是求無向圖中是否存在只有一個環,而且各點連通。方法:樹中只有一環的性質是邊數=點數,滿足這個還不能下定論,因為有可能存在多個環野滿足這樣的條件,所以接下來就dfs判連通性。#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include
http://cnc.boj.me/onlinejudge/newoj/showProblem/show_problem.php?problem_id=217其他人都說用線段樹,可是自己敲著敲著就沒想法,只好轉向樹狀數組,發現可以實現,貌似比別人的線段樹快。 方法:一直維護wbw中第一個w,把它記為1,然後整個數組更新。求和比較頭疼,第一是下標要加1,第二是很容易求錯。後來想了想,發現只要sum(r-2)-sum(l-1),其中l和r都轉化為以1為開始下標。#include
貌似TLE了10來次吧。。。不記得改哪裡咯,大概都是些初始化問題!#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include
小規模用floyd#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include <iomanip>#include
棧類比,當遇到“(”,棧塞入左右兩個人名標號;當遇到“)”,刪除棧頂元素作為x,此時的棧頂元素作為y;當遇到“,”,比“)”多一步操作,就是把棧頂元素作為x,逗號右邊名字標號作為y,並且把右邊標號塞入棧。。。ps:把那句清空棧的語句注釋掉時間更少,hdu 93ms,bupt 71ms,均排到前10!!!orz#include <map>#include <set>#include <list>#include <queue>#include
位元運算很強大,a異或b=k,算出k有多少個1就知道有多少位不同,而算的時候野可以利用位元運算去算,總之位元運算很強大!#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include
注意最佳化空間複雜度,沒用滾動數組前49776K,使用後188K——這就是差別!!!轉移方程:if (str[i] == str[j]) dp[i][j] = dp[i-1][j-1];else dp[i][j] = 1 + min(dp[i+1][j],dp[i][j-1]);#include <map>#include <set>#include <list>#include <queue>#include
#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include <iomanip>#include
前四位我們可以算出d[1]=2,d[2]=4,d[3]=6,d[4]=9. 我們可以這樣想:一個合法串可以由兩個較短的合法串組成 就以d[n]為例:(注意不能重複) 1、n-1個字元的時候: +m 2、n-2: 只能+mm,會和n-1重複,所以不考慮n-2 3、n-3: +mmf 4、n-4: +mmff 5、n-5:
這題看了一個解題報告說可以不用自動機做,單用trie樹就可以過,於是就做做唄。思路是這樣的:因為每個模式串長度不超過6,所以可以建一棵6層的trie樹,從主串的第一個開始枚舉長度為6的字串建樹,樹節點有三個資料域,一個是next數組指向下一個字母,一個是over代表到達當前字母所形成的串可以覆蓋的出現次數,notover代表不可以覆蓋的次數,last_pos代表當前字母上一次的位置,用於不覆蓋情況用的。接著就亂搞,NND,指標竟然爆記憶體!!!只好改用數組#include <map>
#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include <iostream>#include <iomanip>#include
#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>#include <cstdio>#include <math.h>#include
在一張圖上面任意取一個源點與匯點不同側的割。定義流過此割的流量:由源點側流入到匯點側的總流量,減去由匯點側流回到源點側的總流量。定義橫跨此割的容量:由源點側橫跨到匯點側的總容量。根據瓶頸的概念,流過此割的流量會小於等於橫跨此割的容量。因此「最大流的流量」等於「管線容量的最小割」。
第一次正式參加CodeChef的比賽,它是印度的一個類似cf的網站,不過我看它的那些評論時間比cf還早(cf好像是10年才建立的)這個網站好像是每月都有一次這個XX Cook
這題的官方時限是4s,開始直接爆,果然TLE了==後來最佳化了一下,1420ms過了。。。所以說坑爹啊!!!最佳化方法是因為題目中的b是數與數之間的間隔,當間隔大於600時可以直接遍曆,當小於600時就要記錄處於當前間隔的情況有多少種,然後從後向前推,推得的tmp[j]表示j~n間隔為i的和(相當於預先處理),這樣就把最壞的複雜度降了下來,以後就直接O(1)就找到當前的答案。#include <map>#include <set>#include <list>