标签:HERE use its out res cout amp Plan ota
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 13005 Accepted Submission(s): 3258
#include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se second #define all(a) (a).begin(), (a).end() #define fillchar(a, x) memset(a, x, sizeof(a)) #define huan printf("\n") #define debug(a,b) cout<<a<<" "<<b<<" "<<endl #define ffread(a) fastIO::read(a) using namespace std; typedef long long ll; typedef pair<int,int> pii; const int MAXN = 1e5+10;//左集合大小 const int MAXM = 15;//右集合大小 int uN,vN;//左右集合的数量 int g[MAXN][MAXM]; int linker[MAXM][MAXN]; bool used[MAXM]; int num[MAXM];//右集合的限制 bool dfs(int u) { for(int v = 0; v < vN; v++) if(g[u][v] && !used[v]) { used[v] = true; if(linker[v][0] < num[v]) { linker[v][++linker[v][0]] = u; return true; } for(int i = 1; i <= num[v]; i++) if(dfs(linker[v][i])) { linker[v][i] = u; return true; } } return false; } int hungary() { int res = 0,flag=0; for(int i = 0; i < vN; i++) linker[i][0] = 0; for(int u = 0; u < uN; u++) { memset(used,false,sizeof(used)); if(dfs(u)) res++; else //当前人不能匹配 直接就是NO了 { flag=1; break; } } return flag; } int main() { while(scanf("%d%d",&uN,&vN)!=EOF) { for(int i=0;i<uN;i++) for(int j=0;j<vN;j++) scanf("%d",&g[i][j]); for(int i=0;i<vN;i++) scanf("%d",&num[i]); if(hungary()) puts("NO"); else puts("YES"); } }
标签:HERE use its out res cout amp Plan ota
原文地址:https://www.cnblogs.com/stranger-/p/9819672.html