蒟蒻求助
感觉没问题啊
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int n,ans;
const int MAXN=95;
int cbe[MAXN][3],g[MAXN][MAXN],dis[MAXN],fa[MAXN],book[MAXN],T;
int main()
{
while(scanf("%d",&n)&&n)
{
T++;
memset(cbe,0,sizeof cbe);
memset(g,0,sizeof g);
memset(dis,0,sizeof dis);
memset(fa,0,sizeof fa);
memset(book,0,sizeof book);
ans=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&cbe[i][0],&cbe[i][1],&cbe[i][2]);
sort(cbe[i],cbe[i]+3);
cbe[i+n][1]=cbe[i][2];cbe[i+n][2]=cbe[i][1];
cbe[i+2*n][0]=cbe[i][1];cbe[i+2*n][1]=cbe[i][2];
cbe[i+2*n][2]=cbe[i][0];
}
n*=3;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(cbe[j][0]<cbe[i][0]&&cbe[j][1]<cbe[i][1])
{ g[i][j]=1; fa[j]++;}
}
for(int i=1;i<=n;i++)
{
if(fa[i]==0)
{
dis[i]=cbe[i][2];
//cout<<i<<endl;
}
}
int pd=0;
for(int k=0;;k=0)
{
for(int i=1;i<=n;i++)
{
//cout<<"cc";
if(fa[i]==0&&book[i]==0)
{
for(int j=1;j<=n;j++) if(g[i][j])
{
//cout<<"aa"<<endl;
dis[j]=max(dis[j],dis[i]+cbe[j][2]);
fa[j]--;
k=1;
}
book[i]=1;
}
}
if(k==0)break;
}
for(int i=1;i<=n;i++)ans=max(ans,dis[i]);
printf("Case %d: maximum height = %d\n",T,ans);
}
return 0;
}