Submission #247398

#TimeUsernameProblemLanguageResultExecution timeMemory
247398dolphingarlicCheap flights (LMIO18_pigus_skrydziai)C++14
100 / 100
1670 ms99620 KiB
/*
LMIO 2018 Pigus Skrydziai
- We either take all edges incident to one node or we take a triangle
- There are 
*/

#include <bits/stdc++.h>
#define FOR(i, x, y) for (int i = x; i < y; i++)
typedef long long ll;
using namespace std;

ll prof[300001];
vector<pair<ll, int>> graph[300001];
map<pair<int, int>, ll> edges;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    while (m--) {
        int a, b;
        ll v;
        cin >> a >> b >> v;
        prof[a] += v, prof[b] += v;
        graph[a].push_back({v, b});
        graph[b].push_back({v, a});
        edges[{a, b}] = edges[{b, a}] = v;
    }
    ll ans = *max_element(prof + 1, prof + n + 1);
    FOR(i, 1, n + 1) {
        sort(graph[i].begin(), graph[i].end(), greater<pair<ll, int>>());
        if (graph[i].size() > 1) {
            ans = max(ans, graph[i][0].first + graph[i][1].first + edges[{graph[i][0].second, graph[i][1].second}]);
        }
    }
    cout << ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...