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 |
Re:二分匹配 dfs 0ms 水过,分享代码In Reply To:二分匹配 dfs 0ms 水过,分享代码 Posted by:z1219202167 at 2014-03-27 19:25:14 > #include <stdio.h> > #include <string.h> > #include <iostream> > #include <stdlib.h> > #include <algorithm> > #include <vector> > using namespace std; > > const int MAXN = 21; > > int n; > char judge[15], l, r; > int link[MAXN][MAXN];//服装所对应的人,link[i][j]表示第i种衣服的第j个人是几号 > int visit[6], sum[6]; > bool map[MAXN][6];//map[a][b]=1代表a,b顶点有边相连 > > int count(char x) > { > if (x == 'S') > return 1; > else if (x == 'M') > return 2; > else if (x == 'L') > return 3; > else if (x == 'X') > return 4; > else if (x == 'T') > return 5; > } > > bool dfs(int a) > { > int i, j; > for (i = 1; i <= 5; i++) > { > if (map[a][i] == true && visit[i] < sum[i]) > { > visit[i]++; > for (j = 1; j <= sum[i]; j++) > { > if (link[i][j] == 0 || dfs(link[i][j])) > { > link[i][j] = a; > return true; > } > } > } > } > return false; > } > > int main() > { > int i, j, s, e, ans=0; > while (1) > { > scanf("%s", &judge); > if (!strcmp(judge, "ENDOFINPUT")) > break; > scanf("%d", &n); > for (i = 1; i <= n; i++) > { > scanf("%d", &l);//抵消\n > scanf("%c%c", &l, &r); > s = count(l); > e = count(r); > for (j = s; j <= e; j++) > map[i][j] = true; > } > for (i = 1; i <= 5; i++) > scanf("%d", &sum[i]); > for (i = 1; i <= n; i++) > { > memset(visit, 0, sizeof(visit)); > if (dfs(i)) > ans++; > } > scanf("%s", &judge);//twice? > if (ans == n) > printf("T-shirts rock!\n"); > else > printf("I'd rather not wear a shirt anyway...\n"); > memset(link, 0, sizeof(link)); > memset(map, 0, sizeof(map)); > ans = 0; > } > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator