题意:求一幅图中从1再回到1的过程中,经过的点最大的路径。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int mapp[120][120],point[120];
int step[220],ans[220];
int main()
{
int t,m,n,i,j,max,k,a,b,cas=0;
scanf("%d",&t);
while(t--)
{
if(cas>0) printf("\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&point[i]);
scanf("%d",&m);
memset(mapp,0,sizeof(mapp));
point[n+1]=0;
step[1]=-1;
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
mapp[a][b]=1;
}
int tmp=1;
for(i=1;i<=n+1;i++)
{
max=-1,k=0;
for(j=1;j<i;j++)
{
if(mapp[j][i]&&max<point[j])
k=j,max=point[j];
}
if(max!=-1)
step[i]=k,point[i]+=max;
}
printf("CASE %d#\n",++cas);
printf("points : %d\n",point[n+1]);
k=n+1;j=0;
while(step[k]!=-1)
{
ans[++j]=step[k];
k=step[k];
}
printf("circuit : 1->");
for(i=j-1;i>0;i--)
printf("%d->",ans[i]);
printf("1\n");
}
return 0;
}