您的位置:首页 > 其它

uvalive5818 uva12376 As Long as I Learn, I Live

2015-04-21 18:24 197 查看
题意:给出一个又向图每个图有权值和编号(正方形里的是编号),从第0号节点开始每次向当前节点所连的点中权值最大的节点移动(不会存在权值相同的节点),问最后所在的节点编号和经过的节点的权值之和。

解:模拟就好~

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>

using namespace std;

int T;
int n,m;
int f[107];
vector <int> G[107];

int main(){
scanf("%d",&T);
for (int cas=1;cas<=T;cas++){
scanf("%d%d",&n,&m);
for (int i=0;i<n;i++){
scanf("%d",&f[i]);
G[i].clear();
}
for (int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
G[x].push_back(y);
}
int now=0;
int totv=0;
while (1){
//        printf("%d %d\n",now,totv);
int to=0;
int tov=0;
for (int i=0;i<G[now].size();i++){
if (f[G[now][i]]>tov){
to=G[now][i];
tov=f[G[now][i]];
}
}
if (to==0) break;
totv+=tov;
now=to;
}
printf("Case %d: %d %d\n",cas,totv,now);
}
return 0;
}
/*
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
*/


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: