原创 樹形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