原创 樹形DP入門(POJ2342)
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; const int N=6666; int fa[N],dp[N][2],n; vo
原创 二分圖最大匹配算法-匈牙利算法(Hungary)模板
#include<stdio.h> #include<string.h> const int N=1111; int a[N][N],match[N],p[N],n; int dfs(int u) { <span style="white
原创 POJ 1276
#include<stdio.h> #include<string.h> const int N=100000+100; int dp[N],a[20],b[20],t[200]; int main() { int n,m,i,j,cn
原创 網絡流模板
EK; void updata(int i,int flow) { while(pre[i]!=-1) { c[i][pre[i]]+=flow; c[pre[i]][i]-=flow;
原创 輸入輸出掛
inline void in(int &res) { char c; while((c=getchar())<'0'||c>'9'); res=c-'0'; while((c=getchar())>='0'&&c<='9')
原创 POJ 2528
題目鏈接 按輸入順序的區間覆蓋海報,問最後在表面能看到幾種海報。區間範圍太大,不能直接用線段樹,先離散化。如[1,5],[4,5],[2,10],離散化的結果是1(1),2(2),3(4),4(5),5(10),但是這樣簡單的離散化是不對
原创 POJ 2001(傻逼版)
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int ch[300001][26]; int id,p[30001]; char s[
原创 排序二叉樹
#include<stdio.h> #include<string.h> #include<stdlib.h> struct node { int data; node *lc; node *rc; }; node* insert(
原创 最小生成樹(prim&kruskal)模板
prim: ////O(v^2),適用於稠密圖 const int N=1000; const int INF=0x3f3f3f3f; int a[N][N],p[N],low[N];///鄰接矩陣 int prim(int n) {
原创 矩陣結構體
參考文章:http://blog.csdn.net/shuangde800/article/details/8066698 const int N=1100; struct Matrix { int mat[N][N];
原创 2014百度之星資格賽——XOR SUM
#include<stdio.h> #include<string.h> const int N=100000+100; struct node { int ch[2],size; }p[32*N]; int cnt; void ins
原创 最小費用最大流
const int N=1100,INF=0x3f3f3f3f; const int M=N*N; int pre[N],d[N],p[N],ans; int cnt,head[N]; int q[M],l,r; struct edge
原创 次小生成樹模板
次小生成樹可由最小生成樹換一條邊得到,這是核心結論! 證明:咱換種方式去看待這個結論(一個生成樹可以通過換邊得到另一個生成樹),T是某一棵最小生成樹,T0是任一棵異於T的生成樹,通過變換T0 --> T1 --> T2 --> ...
原创 poj 2135最小費用最大流
最小費用最大流就是在增廣的時候選擇最短路(用費用作爲邊權)來增廣,一直增廣到沒得增廣就是我們要求得結果。 例題:poj2135. 題意:求從點1到N再到1共兩條不相交的最短路,邊流量爲1,再加一個源和匯,分別與1和N相連,權爲0,流量爲2