| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
想哭了,这两个代码有什么不一样的,C++下WA #include<iostream> #define maxv 505 using namespace std; bool connected[maxv][maxv]; int pre[maxv],ans,v; bool used[maxv]; bool dfs(int t) { for(int i=1;i<=v;i++) { if(connected[t][i] && !used[i]) { used[i]=true; if(pre[i]==-1 || dfs(i)) { pre[i]=t; return true; } } } return false; } int match() { ans=0; memset(pre,-1,sizeof(pre)); for(int i=1;i<=v;i++) { memset(used,0,sizeof(used)); if(dfs(i)) ans++; } return ans; } int main() { int a,b,e; scanf("%d%d",&v,&e); memset(connected,0,sizeof(connected)); for(int i=1;i<=e;i++) { scanf("%d%d",&a,&b); connected[a][b]=1; } printf("%d\n",match()); return 0; } AC #include <iostream> #include <stdlib.h> #define MAX 501 using namespace std; bool used[MAX]; int match[MAX],res; bool mat[MAX][MAX]; bool passway(int k,int n){//察看第k个点出发能否有增广路经 int i; for(i=1;i<=n;i++) { if(mat[k][i]) {//k和i邻接 if(!used[i]) { used[i] =1; if(match[i]==-1 || passway(match[i],n)) { match[i] = k; return true; } } } } return false; } void hungary(int n) { memset(match,-1,sizeof(match)); for(int i=1;i<=n;i++) { memset(used,0,sizeof(used)); if(passway(i,n)) res++; } } int main(int argc, char *argv[]) { int i,j,k,n,c,r; memset(mat,0,sizeof(mat)); scanf("%d%d",&n,&k); for(i=1;i<=k;i++) { scanf("%d%d",&r,&c); mat[r][c] = 1; } res = 0; hungary(n); printf("%d\n",res); system("PAUSE"); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator