水题~
#include <iostream>
#include <queue>
using namespace std;
int map[105][105];
int v[105];
int dis[105];
int path[105];
int n;
void longpath()
{
queue <int> a;
a.push(1);
while (!a.empty())
{
int cur=a.front();
a.pop();
for (int i=1;i<=n+1;i++)
{
if (map[cur][i])
{
if (dis[cur]+v[i]>dis[i])
{
dis[i]=dis[cur]+v[i];
a.push(i);
path[i]=cur;
}
}
}
}
}
int main()
{
int r;
cin>>r;
for (int t=1;t<=r;t++)
{
memset(dis,0,sizeof(dis));
memset(v,0,sizeof(v));
memset(map,0,sizeof(map));
memset(path,0,sizeof(path));
cin>>n;
for (int i=1;i<=n;i++)
cin>>v[i];
v[n+1]=0;
int m;
cin>>m;
int a,b;
for (int i=1;i<=m;i++)
{
cin>>a>>b;
map[a][b]=1;
}
longpath();
cout<<"CASE "<<t<<"#"<<endl;
cout<<"points : "<<dis[n+1]<<endl;
int p[105];
int count;
int cur=n+1;
for (count=0;path[cur]!=1;count++)
{
p[count]=path[cur];
cur=path[cur];
}
cout<<"circuit : "<<1;
for (int i=count-1;i>=0;i--)
cout<<"->"<<p[i];
cout<<"->"<<1<<endl;
if (t<r)
cout<<endl;
}
}