| 13085 | 2025-01-06 11:54:19 | ruffbrigi | A lehető legkevesebb átszállás (50 pont) | cpp17 | Internal error |
#include <iostream>
#include <map>
#include <vector>
using namespace std;
struct fin_ssz
{
int fin;
int ssz;
};
int main()
{
int n,m,x,y;
cin>>n>>m;
map<int,struct fin_ssz> vonat;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
auto it=vonat.find(x);
if (it!=vonat.end())
{
if(y>vonat[x].fin)
{
vonat[x].fin=y;
vonat[x].ssz=i;
}
}
else
{
vonat[x].fin=y;
vonat[x].ssz=i;
}
}
int atsz=0,meddig,ujmeddig,ujssz;
vector<int> sorszamok;
auto it=vonat.find(1);
if (it!=vonat.end())
{
meddig=vonat[1].fin;
ujmeddig=meddig;
sorszamok.push_back(vonat[1].ssz);
if(meddig==m)
{
cout<<"0"<<endl;
cout<<vonat[1].ssz;
return 0;
}
for (const auto& pair : vonat)
{
if(pair.first <=meddig)
{
if(pair.second.fin>ujmeddig)
{
ujmeddig=pair.second.fin;
ujssz=pair.second.ssz;
}
if(pair.first==meddig)
{
if(ujmeddig<=meddig && meddig!=m)
{
cout<<"-1";
return 0;
}
atsz++;
sorszamok.push_back(ujssz);
if(ujmeddig==m)
{
break;
}
meddig=ujmeddig;
}
}
else
{
if(ujmeddig<=meddig && meddig!=m)
{
cout<<"-1";
return 0;
}
atsz++;
sorszamok.push_back(ujssz);
meddig=ujmeddig;
if(pair.second.fin>ujmeddig)
{
ujmeddig=pair.second.fin;
ujssz=pair.second.ssz;
}
}
}
}
else
{
cout<<"-1";
return 0;
}
if(ujmeddig<=meddig && meddig!=m)
{
cout<<"-1";
return 0;
}
cout<<atsz<<endl;
for (int elem : sorszamok) {
cout << elem << " ";
}
return 0;
}