練習09 三種匹配演算法(模板)

2021-09-26 03:20:21 字數 2199 閱讀 5641

解決二分圖中的最大匹配問題(很多時候都可以把題目轉變成二分圖,剛學網路流有點頭大)。兩個互不相交的子集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 選...