中级农民
- 积分
- 107
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2019-12-14
- 最后登录
- 1970-1-1
|
手动码的代码, 这就是个图问题. 求积分看帖~~
- int getMinProductSumFromTrio(int N, vector<int> &products_from, vector<int> &products_to) {
- unordered_map<int, unordered_set<int>> g;
- for(int i = 0; i < products_from.size(); ++i) {
- int from = products_from[i], to = products_to[i];
- g[from].insert(to);
- g[to].insert(from);
- }
- int res = INT_MAX;
- for(auto &p : g) {
- int cur_node = p.first;
- auto &adj_nodes = p.second;
- if(adj_nodes.size() >= 2) {
- for(const int &first_adj_node : adj_nodes) {
- for(const int &second_adj_node : adj_nodes) {
- if(first_adj_node == second_adj_node) continue;
- // find the trio!
- if(g[first_adj_node].count(second_adj_node)) {
- // calc the product sum.
- int cur_product_sum = g[cur_node].size() + g[first_adj_node].size() + g[second_adj_node].size() - 6;
- res = min(res, cur_product_sum);
- }
- }
- }
- }
- }
- return res == INT_MAX ? -1 : res;
- }
复制代码 |
|