原创 [BZOJ2242]SDOI2011計算器|快速冪|擴展歐幾里得|BSGS

    第一問快速冪,第二問擴歐,第三問BSBG,注意特判。。 BSGS戳這裏 #include<cstdio> #include<iostream> #include<cmath> #include<map> #define ll lo

原创 [BZOJ2618]CQOI2006凸多邊形|掃描線

凸多邊形的面積並好像有很多搞法,網上有O(N^2logN)的算法,窩只會O(N^3logN)的掃描線暴力(好像能做到O(N^3)是麼求解。。把所有三角形的端點和交點放在一起排序,這樣所有圖像就被分成了若干個區間,每個區間內的面積都是若干個

原创 [BZOJ3996]TJOI2015線性代數|最小割

  一開始沒看到是01矩陣。。化簡之後發現 , D=∑i=1n∑j=1na[i]∗a[j]∗b[i][j]−∑i=1na[i]∗c[i] 那麼也就是相當於有n個物品,選了i和j可以得到b[i][j]的收益,但是選i要付出c[i]

原创 [BZOJ4011]HNOI2015落葉楓音|拓撲序DP

窩不會做啊QAQ。。看了題解發現一個DAG每個點選一條入邊就是一顆有根樹(森林),所以DAG的生成有根樹的數量就是所有入度不爲0的點的入度積。那麼在DAG上加了一條邊之後還是這樣算就可能會有一些不合法的情況(成環)了,假設加進來的是s->

原创 [BZOJ1787]AHOI2008 緊急集合|LCA

仔細想想就是水題,找出三個點兩兩之間的LCA,必然會出現至少有兩個LCA相同,因爲肯定要有兩個人先走到一起再往上走嘛,或者就是三個都相同了。。那麼走到不同的LCA就是要走到的點,因爲這個LCA只會使一個點走遠路嘛。。 #include<c

原创 [BZOJ3631]JLOI2014松鼠的新家|樹上差分

看起來是一個裸的樹鏈剖分,其實不用那麼麻煩。。給每個點一個標記表示它到root上所有點權值+多少,把每一次將一條鏈上權值+1的操作差分就相當於把L,R標記+1,把lca和fa[lca]標記-1,最後把標記往上傳就行了。。 #include

原创 [BZOJ4027]HEOI2015兔子與櫻花|貪心

刪點這個過程是與順序無關的,我們不妨從葉子開始刪。。考慮一個點x,刪去任意孩子對答案貢獻是一樣的,所以肯定是從負重小的開始刪,從root開始dfs,離開一個點時維護一個刪完它的子樹上的點時的最終負重c[i],那麼把x的孩子按c排序貪心地刪

原创 [BZOJ1018]SHOI2008堵塞的交通|線段樹

     好神的線段樹題,以前只會維護區間什麼數值信息的,竟然還可以維護聯通性,好題啊,漲姿勢了。。     由於只有兩行嘛,要保證線段樹節點有可加性,我們維護六個信息,分別是右上到右下,右上到左上,右上到左下,右下到左上,右下到左下,

原创 [BZOJ3504]CQOI2014危橋|最大流

源向a1和b1連流量爲2*an,2*bn的邊,a2和b2向匯連流量爲2*an,2*bn的邊,其他邊非危橋連inf,危橋連2的邊,跑最大流,但是這時滿流不一定有解,因爲可能有a1流到b2的流這樣,所以把b1,b2反過來重構圖再跑一次最大流,

原创 [BZOJ3531]SDOI2014旅行

先樹鏈剖分,然後爲每一個教開一顆線段樹,動態開點,沒了。 #include<cstdio> #include<iostream> #include<memory.h> #define N 100005 #define M 4000005

原创 [BZOJ1069]SCOI2007最大土地面積|凸包|旋轉卡殼

    這大概纔是真正的第一題計算幾何了。。首先這四個點肯定在凸包上,所以求出凸包,之後枚舉四邊形的對角線AB,凸包求出來之後點是按逆時針排序的,不妨設B在A的逆時針方向,那麼就在A逆時針轉到B的點之間取一個C點使三角形ABC面積最大,這

原创 [BZOJ1143]CTSC2008祭祀|最長反鏈|floyd|二分圖匹配

      據說這隻有第一問纔會這麼水。。這東西好像叫做最長反鏈。。我的理解就是先一遍floyd找出每個點能到的所有點(好像這東西叫傳遞閉包?),然後對於一對可達的點A,B只能選取一個,這就是匹配了,拆點二分圖,把可達的點對連邊,n-匹配

原创 [BZOJ1038]ZJOI2008瞭望塔|半平面交

考慮某個村莊可以被看見的區域,發現一條線段的上方就是可以看見端點的區域,那就把所有線段扔進去做半平面交,不要忘記了要加上兩條左右邊界。。求出來之後發現答案要麼是某個村莊往上到半平面交的一段距離,要麼是半平面交的某個點向下到輪廓線的一段距離

原创 [BZOJ4010]HNOI2015菜餚製作|拓撲排序+堆

一開始看成字典序最小。。後來想到不對又YY了一種奇怪的方法,不過還是錯的。。     正解是倒着來,邊都倒着加,然後求一個字典序最大的拓撲序,反過來就是答案了。。一開始想不通爲什麼是這樣,仔細想想應該沒錯。。如果沒有選最大的,就讓一個更小

原创 [BZOJ3529]SDOI2014數表|莫比烏斯反演|樹狀數組

要求的是的約數和。。慣用思路,轉過來枚舉,則有,現在要求的就是,那麼如果能處理出的前綴和就可以分塊計算辣。。這兩個都是積性的可以線性篩出來(我嫌麻煩暴力算的)。。但是還要處理a的限制,把所有詢問按a升序排序,i按升序排序,用樹狀數組維護前