构图的时候是课程序号(0..n-1)到课的节数((p-1)*12+q-1)
然后土土匹配就可以AC
http://acm.pku.edu.cn/JudgeOnline/problem?id=2239
- #include <iostream>
- using namespace std;
- #define N 1000
- bool map[N][N],visit[N];
- int n,m,match[N];
- bool dfs(int pre)
- {
- for(int i=0;i<m;i++)
- {
- if(map[pre][i]&&!visit[i])
- {
- visit[i]=true;
- int t=match[i];
- match[i]=pre;
- if(t==-1||dfs(t)) return true;
- match[i]=t;
- }
- }
- return false;
- }
- int find_match()
- {
- memset(match,-1,sizeof(match));
- int i,sum=0;
- for(i=0;i<n;i++){memset(visit,false,sizeof(visit));if(dfs(i)) sum++;}
- return sum;
- }
- int main()
- {
- int i,j,x,y,t;
- while(scanf("%d",&n)!=EOF)
- {
- memset(map,false,sizeof(map));
- m=84;
- for(i=0;i<n;i++)
- {
- scanf("%d",&j);
- while(j--)scanf("%d%d",&x,&y),map[i][(x-1)*12+y-1]=true;
- }
- cout<<find_match()<<endl;
- }
- }
PKU_2239 Selecting Courses
最新推荐文章于 2019-01-08 01:48:28 发布