生活随笔
收集整理的這篇文章主要介紹了
洛谷P3386-二分图最大匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
可以用匈牙利跑,但是剛學完網絡流,就試著用dinic跑了一發
題目鏈接:洛谷P3386
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <queue>
#include <functional>
#include <vector>
#include <stack>
#include <set>
#include <bitset>
using namespace std
;
typedef long long ll
;
const int maxn
=5000+50;
const int inf
=0x3f3f3f3f;
const int MOD
=998244353;
const int HASH
=131;int n
, m
, cnt
;
int head
[maxn
];
int level
[maxn
];
int cur
[maxn
];struct Edge
{int to
;ll val
;int next
;
}edge
[maxn
*maxn
];void add(int u
,int v
,int val
)
{edge
[cnt
].to
=v
;edge
[cnt
].val
=val
;edge
[cnt
].next
=head
[u
];head
[u
]=cnt
++;
edge
[cnt
].to
=u
;edge
[cnt
].val
=0;edge
[cnt
].next
=head
[v
];head
[v
]=cnt
++;
}bool find_level(int s
,int t
)
{queue
<int> q
;memset(level
,0,sizeof(level
));for(int i
=1;i
<=n
;i
++){cur
[i
]=head
[i
];}int u
=s
;level
[u
]=1;q
.push(u
);while(!q
.empty()){u
=q
.front();q
.pop();for(int i
=head
[u
];~i
;i
=edge
[i
].next
){int v
=edge
[i
].to
;ll val
=edge
[i
].val
;if(!level
[v
]&&val
){level
[v
]=level
[u
]+1;q
.push(v
);}}if(level
[t
]){return true;}}return false;
}ll
updata(int u
,ll u_val
,int t
)
{if(u
==t
){return u_val
;}ll used
=0;for(int &i
=cur
[u
];~i
;i
=edge
[i
].next
){int v
=edge
[i
].to
;ll val
=edge
[i
].val
;if(level
[v
]==level
[u
]+1&&val
){ll tmp
=updata(v
,min(u_val
-used
,val
),t
);edge
[i
].val
-=tmp
;edge
[i
^1].val
+=tmp
;used
+=tmp
;if(used
==u_val
) return used
;}}if(used
==0) level
[u
]=-1;return used
;
}ll
Dinic(int s
,int t
)
{ll ans
=0;while(find_level(s
,t
)){ans
+=updata(s
,inf
,t
);}return ans
;
}void init()
{cnt
=0;memset(head
,-1,sizeof(head
));
}int main()
{init();int c
;cin
>>n
>>m
>>c
;for(int i
=1;i
<=c
;i
++){int u
,v
;cin
>>u
>>v
;u
++,v
=n
+v
+1;add(u
,v
,1);}for(int i
=1;i
<=n
;i
++)add(1,i
+1,1);n
++;for(int i
=1;i
<=m
;i
++)add(n
+i
,n
+m
+1,1);int s
=1,t
=n
+m
+1;n
=t
;cout
<<Dinic(s
,t
)<<endl
;return 0;
}
總結
以上是生活随笔為你收集整理的洛谷P3386-二分图最大匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。