解決二分圖中的最大匹配問題(很多時候都可以把題目轉變成二分圖,剛學網路流有點頭大)。兩個互不相交的子集v1 ,v2 尋找他們能匹配到的最大數量。(由於我菜雞,僅僅給出幾種模板,網上有很多部落格講的很好了)
模板秒切
過山車
【模板】二分圖匹配
[zjoi2009]假期的宿舍
#include #include #include using namespace std;
const int n=1001;
int n1,n2,k;
//n1,n2為二分圖的頂點集,其中x∈n1,y∈n2
int map[n][n],vis[n],link[n];
//link記錄n2中的點y在n1中所匹配的x點的編號
int find(int x)}}
return 0;
}int main()
edge[max*max];
int num_edge;
int head[max];
void add_edge(int x,int y) //鄰接表
bool vis[max];//是否匹配過了
int link[max];
bool find(int num)
} }
return false;
}int main()
}} if(cnt1=n)
printf("yes\n");
else
printf("no\n");
} return 0;
}
3、需要自己根據題目構建乙個二分圖
簡單練習:
[shoi2001]小狗散步
ac**:
#include#include#include#include#include#include#define max 450
#define inf 0x3f3f3f3f
using namespace std;
struct nodep[400],b[max];
struct edgeedge[max*max];
bool vis[max];
int link[max];
int head[max];
int ans[max];
int num_edge;
double get_dis(int x1,int y1,int x2,int y2) //計算兩點的距離
void add_edge(int x,int y)
bool find(int num) //模板
} }return false;
}int main()
} for(int i=1;i<=m;i++)
int love[max][max];//記錄好感度
int e_girl[max];//記錄期望值
int e_boy[max];
bool vis_girl[max]; //女孩是否匹配過
bool vis_boy[max]; //男孩是否匹配過
int match[max]; //記錄匹配到的物件,boy匹配到的girl
int slack[max]; //記錄需要增加或者減少的標記
int n; //最大的人數
bool dfs(int girl) //匈牙利求匹配
boylist[i][j]=girl[temp2];//轉化為數字
relation[i][girl[temp2]]=j;//i 到j 的優先順序為 j}}
for(int i=1;i<=n;++i)
}while(q.size()) q.pop();
for(int i=1;i<=n;i++)
for(int i=1;i<=n;i++)
while(q.size())
else //比較優先順序
{if(relation[boylist[now][manpos[now]]][now]first;
temp1=girlname[boymatch[it->second]];
cout《三種匹配演算法基礎模板都在這了,不過還需要更多的題目訓練自己。(穩定婚姻演算法還獲得了2012諾貝爾經濟學獎,感覺我也會,狗頭~~~)
感覺現在網路流和點分治一起看有點慢啊,在機房學習效率真低,還不如晚上自己一小時。加油吧 還有半個月,省選題目盡量多刷,樹和圖我都要!
字串匹配的三種演算法
下面將介紹三種有關字串匹配的演算法,一種是樸素的匹配演算法,時間複雜度為o mn 也就是暴力求解。這種方法比較簡單,容易實現。一種是kmp演算法,時間複雜度為o m n 該演算法的主要任務是求模式串的next陣列。另外還有一種對kmp演算法的改進,主要是求nextval陣列。第一種樸素的匹配演算法 ...
FIFO LRU LFU三種演算法
提到快取,有兩點是必須要考慮的 1 快取資料和目標資料的一致性問題。2 快取的過期策略 機制 其中,快取的過期策略涉及淘汰演算法。常用的淘汰演算法有下面幾種 1 fifo firstin first out 先進先出 2 lru leastrecently used 最近最少使用 3 lfu lea...
三種排序演算法
1.氣泡排序法 2.選擇排序法 3.插入排序法 由小到大的順序 備註 網上筆試題,是參考網上別人的,具體出處找不到了,請諒解。摘抄記錄下來方便日後學習。如果有問題盡請批評指正,希望可以和大神一起交流。氣泡排序的最好的時間複雜度為o n 最壞的時間為 o n 2 演算法的平均時間複雜度為o n 2 選...