Submission #1182498

#TimeUsernameProblemLanguageResultExecution timeMemory
1182498Joon_YorigamiDreaming (IOI13_dreaming)C++20
Compilation error
0 ms0 KiB
#include "dreaming.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long

int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
    using pii = pair<ll, ll>;
    vector<vector<ll>> neighbours;
    map<pair<ll,ll>,ll> edgeweight;
    vector<vector<ll>>().swap(neighbours);
    map<pair<ll,ll>,ll>().swap(edgeweight);
    for(int i=0;i<n;i++)
    {
        neighbours.push_back(vector<ll>());
    }
    ll x,y,z;
    for(int i=0;i<m;i++)
    {
        x=a[i];
        y=b[i];
        z=t[i];
        neighbours[x].push_back(y);
        neighbours[y].push_back(x);
        edgeweight[make_pair(min(x,y),max(x,y))]=z;
    }
    set<ll> seen;
    vector<ll> radii;
    for(int i=0;i<n;i++)
    {
        if(seen.find(i)==seen.end())
        {
            stack<ll> q;
            vector<ll> path(n,-1);
            vector<ll> weight(n,-1);
            set<ll> currseen;
            ll ep1,ep2,curr,total,currfurthest,currfurthestdistance;
            q.push(i);
            weight[i]=0;
            currfurthest=-1;
            currfurthestdistance=-1;
            while(!q.empty())
            {
                curr = q.top();
                q.pop();
                seen.insert(curr);
                for(auto neighbour:neighbours[curr])
                {
                    if(seen.find(neighbour)==seen.end())
                    {
                        weight[neighbour]=weight[curr]+edgeweight[make_pair(min(neighbour,curr),max(neighbour,curr))];
                        q.push(neighbour);
                    }
                }
            }
            for(int i=0;i<n;i++)
            {
                if(weight[i]>currfurthestdistance)
                {
                    ep1=i;
                    currfurthestdistance=weight[i];
                }
            }
            ep2=ep1;
            currfurthestdistance=-1;
            total=0;
            vector<ll>(n,-1).swap(weight);
            weight[ep1]=0;
            set<ll>().swap(currseen);
            stack<ll>({ep1}).swap(q);
            while(!q.empty())
            {
                curr = q.top();
                q.pop();
                currseen.insert(curr);
                for(auto neighbour:neighbours[curr])
                {
                    if(currseen.find(neighbour)==currseen.end())
                    {
                        path[neighbour]=curr;
                        weight[neighbour]=weight[curr]+edgeweight[make_pair(min(neighbour,curr),max(neighbour,curr))];
                        q.push(neighbour);
                    }
                }
            }
            for(int i=0;i<n;i++)
            {
                if(weight[i]>currfurthestdistance)
                {
                    ep2=i;
                    currfurthestdistance=weight[i];
                }
            }
            ll x,y,a,b;
            x=max(weight[ep1],weight[ep2]-weight[ep1]);
            y=min(weight[ep1],weight[ep2]-weight[ep1]);
            ll p1=ep2;
            while(p1!=ep1)
            {
                a=max(weight[p1],weight[ep2]-weight[p1]);
                b=min(weight[p1],weight[ep2]-weight[p1]);
                if(a<x)
                {
                    x=a;
                    y=b;
                }
                p1=path[p1];
            }
            radii.push_back(x);
            radii.push_back(y);
        }
    }
    sort(radii.begin(),radii.end(),greater<long long>());
    if(m==n-1)
    {
        return radii[0]+radii[1];
    }
    return radii[0]+radii[1]+l;
}

int main()
{
    int n,m,l,k;
    cin >> n >> m >> l;
    int a[n];
    int b[n];
    int t[n];
    for(int i=0;i<n;i++)
    {
        cin >> k;
        a[i] = k;
        cin >> k;
        b[i] = k;
        cin >> k;
        t[i] = k;
    }
    //cout << "owo" << endl;
    cout << travelTime(n,m,l,a,b,t) << endl;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccPHKSGv.o: in function `main':
grader.c:(.text.startup+0x0): multiple definition of `main'; /tmp/ccKKvXTJ.o:dreaming.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status