题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1191
不就是个最大匹配么。
结果WA得不行。
看TJ后发现题面上说了一旦没回答出一道题就结束了。所以有个else break;
还是应该仔细读题呢……
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1005; int n,m,hd[N],xnt,pre[N],ans,to[N<<1],nxt[N<<1]; bool vis[N]; void add(int x,int y) { to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt; } bool dfs(int cr) { for(int i=hd[cr],v;i;i=nxt[i]) if(!vis[v=to[i]]) { vis[v]=1; if(!pre[v]||dfs(pre[v])) { pre[v]=cr;return true; } } return false; } int main() { scanf("%d%d",&m,&n);int x,y; for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); add(i,x);if(x!=y)add(i,y); } for(int i=1;i<=n;i++) { memset(vis,0,sizeof vis); if(dfs(i))ans++; else break;// } printf("%d ",ans); return 0; }