4487 2023. 03. 28 20:40:10 Ancsa Benzinkút üzemeltetés (55) cpp11 Időlimit túllépés 6/55 300ms 11356 KiB
#include <bits/stdc++.h>

using namespace std;

/*
5 20
10 10
20 40
30 10
40 20
50 30
*/

void grafir(vector<vector<int>> a)
{
   cout<<endl;
   cout<<"sorok szama"<<a.size()<<endl;
   for(int i=0;i<a.size();i++)
   {
       for(int j=0;j<a.at(i).size();j++)
           cout<<a.at(i).at(j)<<"\t";
       cout<<endl;
   }
   cout<<endl;
}

void dij(vector<vector<int>> g, int start, vector<int> &kapcs, vector<int> &nagyok)
/*
g-szomszedsagi matrix, a csucsok jelolese 1-tol indul
start az indulo csucs
kapcs-kimeno vector megmutatja h melyik csucsba honnan jutunk
aprok-kimeno vector minden csucshoz megmutatja hogy mennyia  legrovedebb  ut koltsege
       olyan vectorrl hivjuk meg amiben NAGY kezdoertekek vannak
*/
{
    int nn=g.size();
    vector<int> kesz(nn), maxok(nn);

    kapcs.at(start)=-1;
    maxok.at(start)=0;
    int akt=start;
    int hanyadik=0;

    while (hanyadik<nn)
    {
       for(int i=1;i<nn;i++)
          if(g.at(akt).at(i)!=0 && !kesz.at(i) && nagyok.at(i)<nagyok.at(akt)+g.at(akt).at(i))
          {
             maxok.at(i)=g.at(akt).at(i)+maxok.at(akt);
             kapcs.at(i)=akt;
          }
       kesz.at(akt)=1;
       int nagy=maxok.at(0), nagyindex=0;

       for(int i=0;i<nn-1;i++)
            if (maxok.at(i)>nagy && kesz.at(i)==0)
            {
               nagy=maxok.at(i);
               nagyindex=i;
            }
       akt=nagyindex;
       hanyadik++;
    }
    nagyok=maxok;
}

void utkeres(int start, int hova, vector<int> kapcs, vector<int> &lista)
{
   if(kapcs.at(hova)==-1)
   {
       lista.push_back(start);
       return;
   }
   else
   {
       utkeres(start, kapcs.at(hova),kapcs, lista);
       lista.push_back(hova);
   }
}

int main()
{
    int n, k;
    cin>>n>>k;
    vector<pair<int,int>> kutak(n+2);

    for(int i=1;i<n+1;i++)
        cin>>kutak.at(i).first>>kutak.at(i).second;
    kutak.at(n+1).first=kutak.at(n).first+k+10;
    kutak.at(n+1).second=0;
/*
    for(pair<int,int> x:kutak)
            cout<<x.first<<" " <<x.second<<endl;
 */
    int meret=n+2;
    vector<vector<int>> graf(n+2);
    for(int i=0;i<n+2;i++)
       graf.at(i).resize(n+2);


    for( int i=1;i<kutak.size();i++)
    {

       for(int j=i+1; j<n+2;j++)
          if (kutak.at(j).first-kutak.at(i).first>=k)
          {
            graf.at(i).at(j)=kutak.at(i).second;
          }
    }

    //grafir(graf);


    vector <int> nagyprofit(n+2,-10);
    vector <int> kapcsolat (n+2);
    int jo=-100, joindex=0;

    for(int i=1;i<n;i++)
    {
       dij(graf,i, kapcsolat, nagyprofit);
       /*cout<<kutak.at(i).first<< "-es kut: \n";
       cout<<"Profit: \n";
       for(int x: nagyprofit)
           cout<<x<<" ";
       cout<<endl;
       cout<<"kapcsolati vector: \n";
       for(int x: kapcsolat)
           cout<<x<<" ";
       cout<<endl;*/
       if (nagyprofit.at(n+1)>jo)
       {
           jo=nagyprofit.at(n+1);
           joindex=i;
       }
    }
    dij(graf, joindex, kapcsolat, nagyprofit);
    vector<int> ut;
    utkeres(joindex,n+1,kapcsolat,ut);

    cout<</*"A legnagyobb profit: "<<*/jo<<endl;
    cout<<ut.size()-1<<" ";
    for(int i=0;i<ut.size()-1;i++)
        cout<<ut.at(i)<<" ";
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 6/55
1 Elfogadva 0/0 3ms 1820 KiB
2 Időlimit túllépés 0/0 300ms 9264 KiB
3 Elfogadva 3/3 3ms 2224 KiB
4 Elfogadva 3/3 3ms 2456 KiB
5 Hibás válasz 0/3 2ms 2540 KiB
6 Hibás válasz 0/3 3ms 2676 KiB
7 Hibás válasz 0/3 3ms 2880 KiB
8 Hibás válasz 0/3 3ms 3032 KiB
9 Hibás válasz 0/3 7ms 3416 KiB
10 Hibás válasz 0/3 9ms 3484 KiB
11 Hibás válasz 0/3 16ms 3896 KiB
12 Időlimit túllépés 0/3 279ms 4828 KiB
13 Időlimit túllépés 0/4 280ms 5848 KiB
14 Időlimit túllépés 0/4 261ms 6984 KiB
15 Időlimit túllépés 0/5 273ms 8344 KiB
16 Időlimit túllépés 0/6 280ms 9692 KiB
17 Időlimit túllépés 0/6 240ms 11356 KiB