考察floyd算法和模拟能力
#include<bits/stdc++.h>
using namespace std;
#define inf int(1e9 + 7)
#define eps 1e-9
struct r{
bool operator()(const pair<double, int>&a,const pair<double, int>&b)const{
return abs(a.first - b.first) < eps ? a.second < b.second : a.first > b.first;
}
};
int main() {
int n;
cin >> n;
vector<vector<int>>a(n , vector<int>(n, inf));
vector<string>sex(n);
for(int i = 0; i < n; ++i) {
int m;
cin >> sex[i] >> m;
for(int j = 0; j < m; ++j) {
int x, d;
scanf("%d:%d", &x, &d);
a[x - 1][i] = d;
}
}
for(int k = 0; k < n; ++k)
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
a[i][j] = min(a[i][j], a[i][k] + a[k][j]);
vector<pair<double, int>>va, vb;
for(int i = 0; i < n; ++i) {
int mx = -1;
for(int j = 0; j < n; ++j)
if(sex[i] != sex[j])
mx= max(mx, a[i][j]);
(sex[i] == "F" ? va : vb).emplace_back(1.0 / mx, i + 1);
}
sort(va.begin(), va.end(), r());
sort(vb.begin(), vb.end(), r());
cout << va[0].second;
int p = 1;
while(p < va.size() && abs(va[p - 1].first - va[p].first) < eps)
cout << " " << va[p++].second;
cout << "\n" << vb[0].second;
p = 1;
while(p < vb.size() && abs(vb[p - 1].first - vb[p].first) < eps)
cout << " " << vb[p++].second;
}