2 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=210; int n,m,tsp,match[N],v[N],g[N][N]; bool dfs(int x) { for(int y=1;y<=n;y++)if(g[x][y]&&v[y]!=tsp) { v[y]=tsp; if(!match[y]||dfs(match[y])) { match[y]=x; return 1; } } return 0; } int main() { scanf("%d%d",&n,&m); for(int i=1,x,y;i<=m;i++) { scanf("%d%d",&x,&y); g[x][y]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]|=g[i][k]&g[k][j]; int cnt=0; memset(match,0,sizeof(match)); 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; int n,m,tsp,match[N],v[N],g[N][N]; bool dfs(int x) { for(int y=1;y<=n;y++)if(g[x][y]&&v[y]!=tsp) { v[y]=tsp; if(!match[y]||dfs(match[y])) { match[y]=x; return 1; } } return 0; } int main() { scanf("%d%d",&n,&m); for(int i=1,x,y;i<=m;i++) { scanf("%d%d",&x,&y); g[x][y]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]|=g[i][k]&g[k][j]; int cnt=0; memset(match,0,sizeof(match)); for(int i=1;i<=n;i++) { tsp=i; if(dfs(i)) cnt++; } printf("%d\n",n-cnt); return 0; }
- 1
信息
- ID
- 1468
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 5
- 标签
- 递交数
- 61
- 已通过
- 23
- 上传者