题目描述
Problem A
类似超市结账,计算购买的商品的总价格。
输入:
第一行为测试数据组数T(0<T<=10)
每组数据第一行为购买商品的种类n,接下来n行,每行两个数据,第一个为商品价格,第二个为商品数量,价格为实型。
输出
每一行输出相对应数据的总价值,保留两位小数。
测试数据:
2
2
1.00 2
0.50 2
1
100.0 1
输出:
3.00
100.00
void short_graph_path()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int vernums, edgenums, closenums;
cin >> vernums;
cin >> edgenums;
cin >> closenums;
vector<vector<int>> edge(vernums, vector<int>(vernums, -1));
vector<pair<int, int>> path(edgenums);
int x, y, val;
for (int i = 0; i < edgenums; i++)
{
cin >> x;
cin >> y;
cin >> val;
path[i] = make_pair(x-1, y-1);
edge[x - 1][y - 1] = val;
edge[y - 1][x - 1] = val;
}
vector<int> closepath(closenums,-1);
for (int i = 0; i < closenums; i++)
{
cin >> val;
closepath[i] = val;
}
vector<int> res;
for (int i = 0; i < 2; i++)
{
vector<bool> visit(vernums, false);
vector<int> pathlong(vernums, 0);
if (i == 1)
{
for (int j = 0; j < closenums; j++)
{
int en = closepath[j];
int x = path[en - 1].first;
int y = path[en - 1].second;
edge[x][y] = -1;
edge[y][x] = -1;
}
}
for (int i = 0; i < edgenums; i++)
{
pathlong[i] = edge[0][i];
if (pathlong[i] == -1)
{
pathlong[i] = INT_MAX;
}
}
visit[0] = true;
bool flag = false;
for (int j = 1; j < vernums; j++)
{
int minlen = INT_MAX;
int t = 0; //待定需要添加的元素
for (int i = 0; i < vernums; i++)
{
if (visit[i] == false && minlen >= pathlong[i])
{
minlen = pathlong[i];
t = i;
}
}
visit[t] = true;
if (t == vernums - 1)
{
res.push_back(pathlong[t]);
break;
}
for (int i = 0; i < vernums; i++)
{
if (visit[i] == false && edge[t][i]!=-1&&pathlong[i] > pathlong[t] + edge[t][i])
{
pathlong[i] = pathlong[t] + edge[t][i];
}
}
}
}
for (int i = 0; i < res.size(); i++)
{
cout << res[i] << endl;
}
}
}