RT,这道题我用map处理下标,然后用floyd做的,代码如下:
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
map<string, map<string, long long> > brain;
map<string, int> book;
string u, v, words[1001];
int n, m, w, top, q;
int main()
{
cin >> n >> m;
for(int i = 1; i <= m; i++)
{
cin >> u >> v >> w;
brain[u][v] = w;
if(book[u] == 0)
{
book[u]++;
words[++top] = u;
}
if(book[v] == 0)
{
book[v]++;
words[++top] = v;
}
}
for(int i = 1; i <= top; i++)
for(int j = 1; j <= top; j++)
if(i == j)
brain[words[i]][words[j]] = 0;
else if(brain[words[i]][words[j]] == 0)
brain[words[i]][words[j]] = 10000000000;
for(int k = 1; k <= top; k++)
for(int i = 1; i <= top; i++)
for(int j = 1; j <= top; j++)
brain[words[i]][words[j]] = min(brain[words[i]][words[j]], brain[words[i]][words[k]] + brain[words[k]][words[j]]);
cin >> q;
for(int i = 1; i <= q; i++)
{
cin >> u >> v;
if(brain[u][v] == 10000000000)
cout << "Roger" << endl;
else
cout << brain[u][v] << endl;
}
return 0;
}