Submission #1158889

#TimeUsernameProblemLanguageResultExecution timeMemory
1158889Marco_EscandonRobot (JOI21_ho_t4)C++20
34 / 100
3113 ms484768 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define x first
#define y second
vector<vector<pair<ll,ll>>> cad;
vector<map<ll,ll>> c1,c2;
vector<pair<ll,ll>> E;
struct st{
    ll cost,node,ed;
    friend bool operator < (st a, st b)
    {
        return a.cost<b.cost;
    }
};
ll cmc()
{
    vector<unordered_map<ll,ll>> v(cad.size());
    for(int i=1; i<cad.size(); i++){
    v[i][E.size()-1]=1e16;
        for(int j=0; j<cad[i].size(); j++)
            v[i][cad[i][j].y]=1e16;}
    
    priority_queue<st>q;q.push({0,1,(ll)E.size()-1});
    while(!q.empty())
    {
        st temp=q.top();q.pop();
        //cerr<<temp.node<<" "<<temp.cost<<"\n";
        if(v[temp.node][temp.ed]==1e16)
        {
            if(temp.node==cad.size()-1) return -temp.cost;
            v[temp.node][temp.ed]=-temp.cost;
            for(auto i:cad[temp.node])
            {
                ll cnt=c2[temp.node][E[i.y].x]-E[i.y].y;
                if(E[temp.ed].x==E[i.y].x)
                    cnt-=E[temp.ed].y;
                q.push({temp.cost-cnt,i.x,(ll)E.size()-1});  
                q.push({temp.cost-E[i.y].y,i.x,i.y});
            }
        }
    }
    return 1e16;
}
int main()
{
    ll n,m;
    cin>>n>>m;
    cad.resize(n+1);
    c1.resize(n+1);
    c2.resize(n+1);
    E.resize(m+2);
    for(int i=0; i<m; i++)
    {
        ll a,b;
        cin>>a>>b>>E[i].x>>E[i].y;
        cad[a].push_back({b,i});
        cad[b].push_back({a,i});
        c1[a][E[i].x]++;
        c2[a][E[i].x]+=E[i].y;
        c1[b][E[i].x]++;
        c2[b][E[i].x]+=E[i].y;
    }
    ll t1=cmc();
    if(t1==1e16) t1=-1;
    cout<<t1; 
}
/*
13 21
7 10 4 
3 6 4 
8 10 4
3 9 2
1 4 4
2 6 4
3 11 2
3 8 16
8 11 16
6 10 4 
6 8 16
9 12 16
5 13 4
1 12 4
2 4 4
2 9 4
2 12 4
10 13 4
5 7 2
5 11 2
7 13 4 



13 21
1 4 4 5
2 4 4 18
1 12 4 7
7 10 4 4
3 6 4 7
8 10 4 5
3 9 2 5
2 6 4 2
3 11 2 2
3 8 16 2
8 11 16 1
6 10 4 14
6 8 16 6
9 12 16 5
5 13 4 6
2 9 4 10
2 12 4 6
10 13 4 28
5 7 2 5
5 11 2 16
7 13 4 20
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...