题意:给出一个又向图每个图有权值和编号(正方形里的是编号),从第0号节点开始每次向当前节点所连的点中权值最大的节点移动(不会存在权值相同的节点),问最后所在的节点编号和经过的节点的权值之和。
解:模拟就好~
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector> using namespace std; int T;
int n,m;
int f[];
vector <int> G[]; int main(){
scanf("%d",&T);
for (int cas=;cas<=T;cas++){
scanf("%d%d",&n,&m);
for (int i=;i<n;i++){
scanf("%d",&f[i]);
G[i].clear();
}
for (int i=;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
G[x].push_back(y);
}
int now=;
int totv=;
while (){
// printf("%d %d\n",now,totv);
int to=;
int tov=;
for (int i=;i<G[now].size();i++){
if (f[G[now][i]]>tov){
to=G[now][i];
tov=f[G[now][i]];
}
}
if (to==) break;
totv+=tov;
now=to;
}
printf("Case %d: %d %d\n",cas,totv,now);
}
return ;
}
/*
2
6 6
0 8 9 2 7 5
5 4
5 3
1 5
0 1
0 2
2 1
6 6
0 8 9 2 6 5
5 4
5 3
1 5
0 1
0 2
2 1
*/