hdu2063 过山车

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2063 1 #include<iostream>
 2 #include<math.h>
 3 #include<stdio.h>
 4 #include<string.h>
 5 #include<stdlib.h>
 6 using namespace std;
 7 const int N=510;
 8 int match[N];
 9 int a[N][N];
10 int use[N];
11 int n;
12 int girl,boy;
13 int dfs(int u)
14 {
15     int t,x;
16     for(int i=1;i<=boy;i++)
17     {
18         x=a[u][i];//判断是否女孩喜欢这个男孩坐旁边
19         if(x==1 && !use[i])
20         {
21             use[i]=1;//判断是否已匹配,无匹配赋值1
22             t=match[i];//用t标记男孩的匹配,用于后面的判断
23             match[i]=u;//强制将男孩的匹配更改到当前女孩的身上
24             if(t==-1 || dfs(t))//由于可能强制更改了男孩的匹配,那么男孩原来匹配的女孩
25             return 1;          //也是需要在另找一个她愿意的男孩进行匹配(dfs)
26             match[i]=t;//如果找不到的话,那么当前的女孩是不能夺走男孩的
27         }
28     }
29     return 0;
30 }
31 int bipartite()
32 {
33     int res=0;
34     memset(match,-1,sizeof(match));//上来初始化男孩的匹配都是-1
35     for(int i=1;i<=girl;i++)
36     {
37         memset(use,0,sizeof(use));//针对每个女孩,男孩是否和他们匹配了
38         if(dfs(i))
39         res++;
40     }
41     return res;
42 }
43
44 int main()
45 {
46     //freopen("in.txt","r",stdin);
47     int p,q;
48     while(~scanf("%d",&n))
49     {
50         if(!n)
51         break;
52         scanf("%d%d",&girl,&boy);//女孩和男孩的数量
53         memset(a,0,sizeof(a));
54         for(int i=0;i<n;i++)
55         {
56             scanf("%d%d",&p,&q);
57             a[p][q]=1;//标记上女孩的喜好
58         }
59         int t=bipartite();
60         printf("%d\n",t);
61     }
62     return 0;
63 }
时间: 2024-12-20 05:18:49

hdu2063 过山车的相关文章

hdu2063过山车(最大匹配)

过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10455 Accepted Submission(s): 4607 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和

HDU2063 过山车 【二分图&#183;最大匹配】

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11477    Accepted Submission(s): 5051 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa

HDU2063过山车

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11142    Accepted Submission(s): 4912 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa

hdu-2063 过山车(二分图)

Time limit1000 ms Memory limit32768 kB RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐.但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partner,PrincessSnow愿意和水域浪子或伪酷儿做partner.考虑到经费问题,boss刘

hdu2063 过山车 二分图最大匹配

男女进行二分图匹配,裸题 1 #include<stdio.h> 2 #include<string.h> 3 int now,head[1001],next[1001],point[1001],visit[1001],match[1001]; 4 5 void add(int x,int y){ 6 next[++now]=head[x]; 7 head[x]=now; 8 point[now]=y; 9 } 10 11 int dfs(int k) 12 { 13 for(in

hdu2063 过山车(最大二分匹配)

强烈推荐的匈牙利算法介绍:http://www.renfei.org/blog/bipartite-matching.html 1 #include "iostream" 2 #include "vector" 3 #include "memory.h" 4 using namespace std; 5 #define swap(a,b,t) ( (t) = (x),(x) = (y),(y) = (t) ) 6 #define MAXN 101

luogu3386 【模板】二分图匹配 匈牙利算法 hdu2063 过山车 dinic

luogu 匈牙利算法 #include <iostream> #include <cstring> #include <cstdio> using namespace std; int n, m, uu, vv, e, lnk[1005], ans; bool a[1005][1005], vis[1005]; bool dfs(int u){ for(int i=1; i<=m; i++){ if(a[u][i] && !vis[i]){ vi

hdu 2063 过山车 二分匹配(匈牙利算法)

简单题hdu2063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13500    Accepted Submission(s): 5913 Problem Description RPG girls今天和大家一起去游乐场玩

旅游 - 珠海长隆海洋王国 - 鹦鹉过山车

说来惭愧,三十多岁的人从来没坐过过山车.以往没坐过不是因为胆小,只是没有机会,几年前有一次已经把车开到了欢乐谷门口,但硬是被无穷无尽的长队给吓退.难得这次有机会,就争取感受一把.早上进园的时候已经很晚,原本还担心要排很久的队伍,实际走到那个僻静的入口时并没有看到什么人.穿过长长长长的幽深小径之后来到上车点.前面只稀稀拉拉排了十几个人,等了一辆车就排到了.本来想坐第一排最外侧的位置,可惜放眼镜的时候被人抢坐,只能坐在第三排的外侧.耳边都是在说什么很害怕不想坐了,我也稍微有了一点紧张.坐上之后盖好固