题目:
不就是个最大匹配么。
结果WA得不行。
看TJ后发现题面上说了一旦没回答出一道题就结束了。所以有个else break;
还是应该仔细读题呢……
#include#include #include #include 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\n",ans); return 0;}