| ||||||||||
| 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 | |||||||||
10个测试用例 过了9个In Reply To:Re:构图犯了很白痴的错。。。不过好慢啊!!请教匹配是怎么做的呢?? Posted by:20053565 at 2007-07-22 03:51:03 > 我的匹配 不过WA了
> #include <stdio.h>
> #include <string.h>
>
> int n, f, d;
> int map1[101][101], map2[101][101];
> int b[101], link[101];
> int B[101], Link[101];
>
> int Find(int v)
> {
> int i;
>
> for(i = 1; i <= d; i++)
> {
> if(map2[v][i]&&!B[i])
> {
> B[i] = 1;
> if(Link[i]==0||Find(Link[i]))
> {
> Link[i] = v;
> return 1;
> }
> }
> }
> return 0;
> }
>
> int find(int v)
> {
> int i;
>
> for(i = 1; i <= n; i++)
> {
> if(map1[v][i]&&!b[i])
> {
> b[i] = 1;
> if(link[i]==0)
> {
> memset(B,0,sizeof(B));
> if(Find(i))
> {
> link[i] = v;
> return 1;
> }
> }
> else
> if(find(link[i]))
> {
> link[i] = v;
> return 1;
> }
> }
> }
> return 0;
> }
>
> int main()
> {
> int i, j, t;
> int fi, di, ans = 0;
>
> scanf("%d%d%d",&n,&f,&d);
> memset(map1,0,sizeof(map1));
> memset(map2,0,sizeof(map2));
> for(i = 0; i < n; i++)
> {
> scanf("%d%d",&fi,&di);
> for(j = 0; j < fi; j++)
> {
> scanf("%d",&t);
> map1[t][i+1] = 1;
> }
> for(j = 0; j < di; j++)
> {
> scanf("%d",&t);
> map2[i+1][t] = 1;
> }
> }
> memset(link,0,sizeof(link));
> memset(Link,0,sizeof(Link));
> for(i = 1; i <= f; i++)
> {
> memset(b,0,sizeof(b));
> 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