2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N = 210; vector<int> G[N]; int n, m, match[N], vis[N], tsp; bool dfs(int x) { for(int y : G[x]) if(vis[y] != tsp) { vis[y] = tsp; if(!match[y] || dfs(match[y])) { match[y] = x; return 1; } } return 0; } int main() { int T; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &m); memset(G, 0, sizeof(G)); for(int i = 1, x, y; i <= m; i++) { scanf("%d%d", &x, &y); G[x].push_back(y); } int cnt = 0; memset(match, 0, sizeof(match)); memset(vis, 0, sizeof(vis)); for(int i = 1; i <= n; i++) { tsp = i; if(dfs(i)) cnt++; } printf("%d\n", n - cnt); } return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=210; vector<int>G[N]; int n,m,match[N],vis[N],tsp; bool dfs(int x) { for(int y:G[x])if(vis[y]!=tsp) { vis[y]=tsp; if(!match[y]||dfs(match[y])) { match[y]=x; return 1; } } return 0; } int main() { int T;scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(G,0,sizeof(G)); for(int i=1,x,y;i<=m;i++) { scanf("%d%d",&x,&y); G[x].push_back(y); } int cnt=0; memset(match,0,sizeof(match)); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { tsp=i; if(dfs(i)) cnt++; } printf("%d\n",n-cnt); } return 0; }
- 1
信息
- ID
- 1498
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 5
- 标签
- 递交数
- 47
- 已通过
- 20
- 上传者