天哪终于A了泥泞地,刚开始模板return错了后来数组又类型开错了。。。
#include<cstdio> #include<vector> #include<iostream> using namespace std; int t; char ch[155][155]; int a[155][155],b[155][155];//不要顺手 int link[30005]; int vis[30005]; vector<int>e[30005]; int find(int x) { for(int i=0;i<e[x].size();i++) { int y=e[x][i]; if(vis[y]!=t) { vis[y]=t; if(link[y]==0||find(link[y])) { link[y]=x; return 1; } } } return 0;//here不要手误 } int main() { int r,c; int cnt=1; scanf("%d%d",&r,&c); for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { cin>>ch[i][j]; } } for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { if(ch[i][j]=='.') { if(ch[i][j-1]=='*')cnt++; a[i][j]=0; } else if(ch[i][j]=='*') { a[i][j]=cnt; } } if(ch[i][c]=='*')cnt++; } int maxn=cnt; cnt=1; for(int i=1;i<=c;i++) { for(int j=1;j<=r;j++) { if(ch[j][i]=='.') { if(ch[j-1][i]=='*')cnt++; b[j][i]=0; } else if(ch[j][i]=='*') { b[j][i]=cnt; } } if(ch[r][i]=='*')cnt++; } for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { if(a[i][j]==0)continue; e[a[i][j]].push_back(b[i][j]); } } int ans=0; for(int i=1;i<=maxn;i++) { t++; if(find(i)) { ans++; } } printf("%d\n",ans); return 0; }