***题意:求最大匹配是否为n
今天突然想起来吧模板改一下,然而自己得想法不对,WA了有十多次吧,看了一下题解,不需要改,套上模板就行***
#include<stdio.h> #include<string.h> #define N 200 struct node { int a, b; } s1[N], s2[N]; int vis[N], used[N], n, G[N][N]; int Hungary(int u) { if(u==0) return 0; for(int i=1; i<=n; i++) { if(!vis[i]&&G[u][i]) { vis[i]=1; //int a; if(!used[i] || Hungary(used[i])) { used[i]=u; return 1; } } } return 0; } int main() { int T; scanf("%d", &T); while(T--) { scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%d%d", &s1[i].a, &s1[i].b); for(int i=1; i<=n; i++) scanf("%d%d", &s2[i].a, &s2[i].b); memset(used, 0, sizeof(used)); memset(G, 0, sizeof(G)); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) { if(s1[i].b>=s2[j].a&&s1[i].a>s2[j].b) G[i][j]=1; } int cnt=0; for(int i=1; i<=n; i++) { memset(vis, 0, sizeof(vis)); if(Hungary(i)) cnt++; } if(cnt==n) printf("Yes "); else printf("No "); } return 0; }