题目描述
给定n个点,点对之间至多有一条双向道路链接,每条道路要想通过则有一定的花费。
给定物体的路径,计算其花费。
输入
第一行两个整数n m t表示点的个数、道路条数和询问个数
接下来m行每行三个整数x y w,表示x和y之间有一条花费w的道路
接下里t行每行k+1个整数,第一个整数k表示这次询问的路径长度为k,接下来k个整数表示具体路径
输出
t行每行一个整数表示每次询问的路径花费
样例输入 Copy
1 2 1
2 3 1
3 4 1
3 1 2 3
3 2 3 4
样例输出 Copy
2
2
提示
出现的所有整数除输出和m外均小于等于100
m<=n*(n-1)/2
保证询问的路径相邻两点之间必有道路
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int a[105][105];
int sum[105];
int p[105];
int main (){
int n,m,t,x,y,k,t2;
cin>>n>>m>>t;
for(int i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&t2); //存储数据ok
a[x-1][y-1]=t2;
a[y-1][x-1]=t2;//正反都存一遍
}
for(int i2=0;i2<t;i2++){
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d",&p[i]);
}
int temp=0;
for(int i=0;i<k-1;i++){
temp=temp+a[p[i]-1][p[i+1]-1];
}
sum[i2]=temp;
}
for(int i=0;i<t;i++){
cout<<sum[i]<<endl;
}
return 0;
}