Submission #1181239

#TimeUsernameProblemLanguageResultExecution timeMemory
1181239asli_bgPalembang Bridges (APIO15_bridge)C++20
22 / 100
409 ms35612 KiB
#include<bits/stdc++.h>
using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;

#define int long long

typedef pair<int,int> pii;
typedef vector<pii> vii;
typedef vector<int> vi;
typedef vector<bool> vb;

#define FOR(i,a) for(int i=0;i<(a);i++)
#define FORE(i,a,b) for(int i=(a);i<(b);i++)

#define all(x) x.begin(),x.end()
#define fi first
#define se second
#define pb push_back
#define sp <<" "<<

#define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl;
#define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl;

#define DEBUG(x) cout<<#x sp x<<endl;
#define carp(x,y) ((x%MOD)*(y%MOD))%MOD
#define topla(x,y) ((x%MOD)+(y%MOD))%MOD
#define mid (l+r)/2

const int MAXN=3e4+5;
const int MOD=1e9+7;
const int INF=1e18;

map<int,vi> tut;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n,k;
    cin>>k>>n;
    vector<char> p(n+1), q(n+1);
    vi s(n+1), t(n+1);

    set<int> cur;

    int ans=0;
    int top=0;
    int tt=0;
    FORE(i,1,n+1){
        cin>>p[i]>>s[i]>>q[i]>>t[i];
        cur.insert(s[i]);
        cur.insert(t[i]);

        if(p[i]!=q[i]){
            top+=t[i]+s[i];
            tt+=2;
            tut[s[i]].pb(i);
            tut[t[i]].pb(i);
        }
        else ans+=abs(t[i]-s[i]);
    }

    vi vec;
    for(auto el:cur) vec.pb(el);

    int sz=vec.size();

    if(k==1){
        int res=INF;
        int say=0;
        int tane=0;
        FOR(i,sz){ //vec[i] de ise köprü
            say+=tut[vec[i]].size()*vec[i];
            tane+=tut[vec[i]].size();
            res=min(res,tane*vec[i]-say+(top-say)-((tt-tane)*vec[i]));
        }   

        cout<<ans+res+tt/2<<endl;
    }   
    else if(k==2){
        int say,say2,tane,tane2;
        say=say2=tane=tane2=0;
        int res=INF;
        set<int> bir;
        FOR(i,sz){ //vec[i] de ise köprü
            say+=tut[vec[i]].size()*vec[i];
            tane+=tut[vec[i]].size();
            for(auto el:tut[vec[i]]){
                if(bir.count(el)) continue;
                say2+=t[el];
                tane2++;
                bir.insert(el);
            }

            int deg=tane*vec[i]-say+say2-(tane2*vec[i]);


            int say3,tane3;
            say3=tane3=0;

            FORE(j,i+1,sz){
                for(auto el:tut[vec[j]]){
                    if(!bir.count(el)){
                        say3+=vec[j];
                        tane3++;
                    }
                }

                int deg2=tane3*vec[j]-say3;
                int deg3=(top-say-say2-say3)-(tt-tane-tane2-tane3)*vec[j];

                res=min(res,deg+deg2+deg3);
            }
        }   

        cout<<ans+res+tt/2<<endl;
    }
} 
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...