| ||||||||||
| 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 | |||||||||
拆点~In Reply To:WA,匹配怎么做的啊?大牛们~ Posted by:choupigwb at 2008-10-16 15:57:48 > #include <iostream>
> using namespace std;
>
> const int N=111;
>
> int n,f,d,Fcnt[N],Dcnt[N],F[N],D[N],link[N];
> bool s[N],g[N][N],v[N][N][N],use[N],canuse[N];
>
> bool find(int a)
> {
> int i,j;
> for(i=1;i<=d;i++)
> {
> if(!s[i]&&g[a][i])
> {
> for(j=1;j<=n;j++)
> {
> if(v[a][i][j]&&canuse[j])
> {
> canuse[j]=false;
> s[i]=true;
> if(link[i]==0||find(link[i]))
> {
> link[i]=a;
> return true;
> }
> }
> }
> }
> }
> return false;
> }
>
> int main()
> {
> int i,j,k;
> scanf("%d%d%d",&n,&f,&d);
> for(i=1;i<=n;i++)
> {
> scanf("%d%d",&Fcnt[i],&Dcnt[i]);
> for(j=1;j<=Fcnt[i];j++)
> scanf("%d",&F[j]);
> for(j=1;j<=Dcnt[i];j++)
> scanf("%d",&D[j]);
> for(j=1;j<=Fcnt[i];j++)
> for(k=1;k<=Dcnt[i];k++)
> {g[F[j]][D[k]]=true;v[F[j]][D[k]][i]=true;}
> }
> int ans=0;
> for(i=1;i<=f;i++)
> {
> memset(s,false,sizeof(s));
> memset(canuse,true,sizeof(canuse));
> if(find(i))ans++;
> }
> printf("%d\n",ans);
> return 1;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator