Submission #1139664

#TimeUsernameProblemLanguageResultExecution timeMemory
1139664sashaaaaCheap flights (LMIO18_pigus_skrydziai)C++20
0 / 100
304 ms65020 KiB
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 3e5 + 5;
#define int long long

struct muchie
{
    int a, b;
    long long p;

    friend bool operator < (muchie A, muchie B)
    {
        return A.p > B.p;
    }
};

vector <set<int>> adj;
map<pair <int, int>, long long> cost;
bitset <NMAX> visited;
int parent[NMAX];

void dfs(int nod, int p, long long & ans)
{
    visited[nod] = true;
    parent[nod] = p;

    for(int i : adj[nod])
    {
        if(visited[i] == true && cost.find({p, nod}) != cost.end())
        {
            ans = max(ans, 1ll * cost[{nod, i}] + cost[{i, p}] + cost[{p, nod}]);
        }
        if(visited[i] == false)
        {
            dfs(i, nod, ans);
        }
    }
}

int32_t main()
{
    cin.tie(nullptr);
    ios_base :: sync_with_stdio(false);

    int N, M;
    cin >> N >> M;

    vector<muchie> muchii(M);
    vector<long long> sum(N + 1, 0ll);
    adj.resize(N + 1);

    for(int i = 0; i < M; i ++)
    {
        cin >> muchii[i].a >> muchii[i].b >> muchii[i].p;

        adj[muchii[i].a].insert(muchii[i].b);
        adj[muchii[i].b].insert(muchii[i].a);
        cost[{muchii[i].a, muchii[i].b}] = muchii[i].p;
        cost[{muchii[i].b, muchii[i].a}] = muchii[i].p;
    }

    for(auto & i : muchii)
    {
        sum[i.a] += i.p;
        sum[i.b] += i.p;
    }

    long long ans = 0;
    for(int i = 1; i <= N; i ++)
    {
        ans = max(ans, sum[i]);
    }

    for(int i = 1; i <= N; i ++)
    {
        if(visited[i] == false)
        {
            dfs(i, 0, ans);
        }
    }

    cout << ans << '\n';

    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...