标签:HDU 匹配 long 反悔 裸题 pair 2063 define
http://acm.hdu.edu.cn/showproblem.php?pid=2063
因为要补某一道cf题特意来学一下。。。
匈牙利算法关键在于在能“反悔”的时候尽量“反悔”进行新的匹配以获得更多的匹配数。具体建议看代码很好看懂~
1 #define bug(x) cout<<#x<<" is "<<x<<endl 2 #define IO std::ios::sync_with_stdio(0) 3 #include <bits/stdc++.h> 4 #define pa pair<int,int> 5 #define iter ::iterator 6 using namespace std; 7 #define ll long long 8 #define mk make_pair 9 #define pb push_back 10 #define se second 11 #define fi first 12 #define ls o<<1 13 #define rs o<<1|1 14 ll mod=998244353; 15 const int N=1e3+5; 16 int q,n,m; 17 int g[N][N]; 18 int vis[N]; 19 int a[N]; 20 int find(int x){ 21 for(int i=1;i<=m;i++){ 22 if(g[x][i]&&!vis[i]){ 23 vis[i]=1; 24 if(!a[i]||find(a[i])){ 25 a[i]=x; 26 return 1; 27 } 28 } 29 } 30 return 0; 31 } 32 int main(){ 33 while(~scanf("%d",&q)&&q){ 34 scanf("%d%d",&n,&m); 35 memset(g,0,sizeof(g)); 36 memset(a,0,sizeof(a)); 37 for(int i=1;i<=q;i++){ 38 int x,y; 39 scanf("%d%d",&x,&y); 40 g[x][y]=1; 41 } 42 int ans=0; 43 for(int i=1;i<=n;i++){ 44 memset(vis,0,sizeof(vis)); 45 if(find(i))ans++; 46 } 47 printf("%d\n",ans); 48 } 49 }
标签:HDU,匹配,long,反悔,裸题,pair,2063,define 来源: https://www.cnblogs.com/ccsu-kid/p/11507224.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。