hoj 3008 Matryoshka Dolls Again 最大独立子集
2012-04-07 16:03
225 查看
/*
题目:
当一个洋娃娃的长宽高都比另一个大时,小的那个可以被套进去,问在最外面的洋娃娃的
最小个数
分析:
求最大独立集,用娃娃总数-最大匹配即可,用两层循环先建图,每当娃娃i长宽高都比j小时,
则g[i][j] =
true建图即可,开始时我竟然先对它进行排序,后来才发现是不用的。。。直接
两层循环再比较即可建图。求最大匹配就是纯粹的hungy算法
*/
#include
<iostream>
#include
<cstring>
#include
<cstdio>
using namespace
std;
#define X 502
int
xm[X],ym[X],n,m;
bool g[X][X],use[X];
struct node
{
int a,b,c;
}p[X];
bool dfs(int u)
{
for(int v=1;v<=n;v++)
if(g[u][v]&&!use[v])
{
use[v] = true;
if(ym[v]==-1||dfs(ym[v]))
{
xm[u] = v;
ym[v] = u;
return true;
}
}
return false;
}
int hungry()
{
memset(xm,-1,sizeof(xm));
memset(ym,-1,sizeof(ym));
int ret = 0;
for(int u=1;u<=n;u++)
if(xm[u]==-1)
{
memset(use,false,sizeof(use));
if(dfs(u))
ret++;
}
return ret;
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
while(cin>>n,n)
{
for(int i=1;i<=n;i++)
scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
memset(g,false,sizeof(g));
for(int i=1;i<=n;i++) //建图
for(int j=1;j<=n;j++)
if(i!=j&&p[j].a>p[i].a&&p[j].b>p[i].b&&p[j].c>p[i].c)//当三者均满足时
g[j][i] = true;
printf("%d\n",n-hungry());
}
return 0;
}
题目:
当一个洋娃娃的长宽高都比另一个大时,小的那个可以被套进去,问在最外面的洋娃娃的
最小个数
分析:
求最大独立集,用娃娃总数-最大匹配即可,用两层循环先建图,每当娃娃i长宽高都比j小时,
则g[i][j] =
true建图即可,开始时我竟然先对它进行排序,后来才发现是不用的。。。直接
两层循环再比较即可建图。求最大匹配就是纯粹的hungy算法
*/
#include
<iostream>
#include
<cstring>
#include
<cstdio>
using namespace
std;
#define X 502
int
xm[X],ym[X],n,m;
bool g[X][X],use[X];
struct node
{
int a,b,c;
}p[X];
bool dfs(int u)
{
for(int v=1;v<=n;v++)
if(g[u][v]&&!use[v])
{
use[v] = true;
if(ym[v]==-1||dfs(ym[v]))
{
xm[u] = v;
ym[v] = u;
return true;
}
}
return false;
}
int hungry()
{
memset(xm,-1,sizeof(xm));
memset(ym,-1,sizeof(ym));
int ret = 0;
for(int u=1;u<=n;u++)
if(xm[u]==-1)
{
memset(use,false,sizeof(use));
if(dfs(u))
ret++;
}
return ret;
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
while(cin>>n,n)
{
for(int i=1;i<=n;i++)
scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
memset(g,false,sizeof(g));
for(int i=1;i<=n;i++) //建图
for(int j=1;j<=n;j++)
if(i!=j&&p[j].a>p[i].a&&p[j].b>p[i].b&&p[j].c>p[i].c)//当三者均满足时
g[j][i] = true;
printf("%d\n",n-hungry());
}
return 0;
}
相关文章推荐
- hdu1068 二分图最大独立子集
- HDU3829 【最大独立子集】
- hdu1068 二分图最大独立子集
- 最大独立子集模板!!!(树形dp)
- 最大独立子集
- 无向图的最大独立子集:Girls ans Boys
- hdu 1068 最大独立子集问题
- HDU 1068 Girls and Boys (二分图 最大独立子集)
- 【新手向】最大团问题和最大独立子集的懒人算法(随机化)
- poj 1466 Girls and Boys 二分图-最大独立子集
- HDU3829-最大独立子集
- DP26树的最大独立子集问题 Largest Independent Set Problem @geeksforgeeks
- 【网络流24题】骑士共存问题(二分图染色+最大权独立子集+最小割)
- HDU-1068 Girls and Boys 最大独立子集
- POJ-2771 Guardian of Decency 最大独立子集
- 树的最大独立子集
- LightOJ - 1356 质因数分解+最大独立子集
- 二分图的应用:最小覆盖,最小边覆盖,最大独立子集,最小路径覆盖
- hdu 1569 方格取数(2)【最大权独立集合-------最大流Edmond_Karp】
- hrbust 2163 棋盘取数【最大权独立集合-------最大流Dinic】