【匈牙利算法】指引(jzoj 2319)
生活随笔
收集整理的這篇文章主要介紹了
【匈牙利算法】指引(jzoj 2319)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
指引
jzoj 2319
題目大意:
在平面上有n個(gè)人和出口,一個(gè)出口只能讓一個(gè)人進(jìn),每個(gè)人只能向右向上走,問(wèn)最多讓多少個(gè)人到出口
輸入樣例:
6 3 2 0 3 1 1 3 4 2 0 4 5 5輸出樣例:
2解題思路:
直接用匈牙利算法(詳情見(jiàn)https://blog.csdn.net/ssllyf/article/details/86657342)計(jì)算最大匹配即可
代碼:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int t,n,xx,yy,tot,ans,x[1050],y[1050],ck[1050],p[1050],head[1050]; struct rec {int to,next; }a[1000500]; bool hg(int dep)//匈牙利算法 {for (int i=head[dep];i;i=a[i].next)if (!p[a[i].to]){int l=ck[a[i].to];ck[a[i].to]=dep;p[a[i].to]=1;if(!l||hg(l)) return true;ck[a[i].to]=l;}return false; } int main() {scanf("%d %d",&t,&n);for (int i=1;i<=n;++i)scanf("%d %d",&x[i],&y[i]);for (int i=1;i<=n;++i){scanf("%d %d",&xx,&yy);for (int j=1;j<=n;++j)if (x[j]<=xx&&y[j]<=yy){a[++tot].to=i;//連邊a[tot].next=head[j];head[j]=tot;}}for (int i=1;i<=n;++i){memset(p,0,sizeof(p));if(hg(i)) ans++;}printf("%d",ans);return 0; }總結(jié)
以上是生活随笔為你收集整理的【匈牙利算法】指引(jzoj 2319)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CPU占用情况查看方法如何查看电脑内存占
- 下一篇: 网线设置fast路由器怎么设置fast路