poj 2239 二分 最大匹配
2014-08-04 12:57
337 查看
题意:给出n个课程每周的课程安排,求最多可以上几个课。
解法:二分匹配-最大匹配
左集合,课程
右集合:课程上课时间的排序集合
解法:二分匹配-最大匹配
左集合,课程
右集合:课程上课时间的排序集合
/* ---------------------------------- Love is more than a word. It says so much. When I see these four letters, I almost feel your touch. This is only happened since I fell in love with you. Why this word does this, I haven't got a clue. To My Goddess CY ---------------------------------- */ #include<iostream> #include<cstring> #include<algorithm> #include<cstdlib> #include<vector> #include<cmath> #include<stdlib.h> #include<iomanip> #include<list> #include<deque> #include<map> #include <stdio.h> #include <queue> #define maxn 350+5 #define ull unsigned long long #define ll long long #define reP(i,n) for(i=1;i<=n;i++) #define REP(i,a,b) for(i=a;i<=b;i++) #define rep(i,n) for(i=0;i<n;i++) #define cle(a) memset(a,0,sizeof(a)) #define clehead(a) rep(i,maxn)a[i]=-1 /* The time of story : ** while(1) { once upon a time, there was a mountain, on top of which there was a temple, in which there was an old monk and a little monk. Old monk was telling stories inside the temple. What was he talking about? ** } ÎûÎû (*^__^*) */ #define sci(a) scanf("%d",&a) #define scd(a) scanf("%lf",&a) #define pri(a) printf("%d",a) #define prie(a) printf("%d\n",a) #define prd(a) printf("%lf",a) #define prde(a) printf("%lf\n",a) #define pre printf("\n") #define LL(x) x<<1 #define RR(x) x<<|1 #define pb push_back #define mod 90001 #define PI 3.141592657 const ull INF = 1LL << 61; const int inf = int(1e5)+10; const double eps=1e-5; using namespace std; struct node { int u,v,w; int next; }; bool cmp(int a,int b){ return a>b; } int n,t; vector<int>V[350]; bool bmap[maxn][maxn]; bool bmark[10000]; int nx,ny; int cx[10000]; int cy[10000]; int findpath(int u) { int i,j,k; rep(i,ny){ if(bmap[u][i]&&!bmark[i]){ bmark[i]=1; if(cy[i]==-1||findpath(cy[i])) { cy[i]=u; cx[u]=i; return 1; } } } return 0; } int maxmatch() { int i,j,k; int res(0); rep(i,nx)cx[i]=-1; rep(j,ny)cy[j]=-1; rep(i,nx){ if(cx[i]==-1){ rep(j,ny)bmark[j]=0; res+=findpath(i); } } return res; } int main() { // freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(cin>>n) { int i,j,k; cle(bmap); int used[20][20]; cle(used); int t; rep(i,n) { V[i].clear(); sci(t); V[i].pb(t); rep(j,t) { int x,y; cin>>x>>y; V[i].pb(x); V[i].pb(y); used[x][y]=1; } } int ip=0; ny=0; nx=n; reP(i,7){ reP(j,12){ if(used[i][j]){ used[i][j]=ip++; } } } ny=ip; rep(i,n) { for(j=1;j<=2*V[i][0];j+=2) { bmap[i][used[V[i][j]][V[i][j+1]]]=true; } } cout<<maxmatch()<<endl; } return 0; }
相关文章推荐
- POJ 2239 Selecting Courses 最大二分匹配
- poj 2239 Selecting Courses 最大二分匹配
- POJ 2239 二分最大匹配
- 【二分图+最大匹配+解题思路】北大 poj 2239 Selecting Courses
- POJ-2239 Selecting Courses 二分匹配
- POJ 2239 简单的二分图求最大匹配
- POJ 2239 Selecting Courses (二分匹配)
- 【最大流+Dinic+Edmonds_Karp+二分匹配】北大 poj 1698 Alice's Chance
- poj 2536 Gopher II 最大二分匹配
- POJ 1325 Machine Schedule (最大二分匹配)
- POJ 1087 A Plug for UNIX(最大二分匹配)
- poj 1469 COURSES 最大二分匹配
- POJ 1087 A Plug for UNIX(网络流—最大流(最大二分匹配))
- poj 2226 最大流二分匹配
- POJ 1274 / POJ 1469 / POJ 2239 二分图最大匹配
- poj 2446 Chessboard (最大二分匹配)
- POJ 3020 Antenna Placement(二分最大匹配)
- POJ 3020 Antenna Placement(最大二分匹配)
- Poj1469_匈牙利算法_最大二分匹配
- POJ 1274 / POJ 1469 / POJ 2239 二分图最大匹配