Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- struct att
- {int time; bool able;};
- struct rebro
- {int xn;int xk;int yn;int yk;};
- int main()
- {
- int ns, t, nr;
- cin>>ns>>t>>nr;
- att **rasp=new att*[ns];
- for (int i=0;i<ns;i++)
- rasp[i]=new att[nr];
- for (int i=0;i<ns;i++)
- for (int j=0;j<nr;j++)
- {
- rasp[i][j].time=-1;
- rasp[i][j].able=false;
- }
- for (int i=0;i<nr;i++)
- {
- int nost;
- cin>>nost;
- for (int j=0;j<nost;j++)
- {
- int tost,ttime;
- cin>>tost;
- cin>>ttime;
- rasp[tost-1][i].time=ttime;
- }
- }
- for (int i=0;i<nr;i++)
- rasp[0][i].able=true;
- vector <rebro> graph;
- for (int i=0;i<nr;i++)
- for (int j=0;j<ns;j++)
- for (int k=0;k<ns;k++)
- {
- if (j!=k && rasp[j][i].time!=-1 && rasp[k][i].time!=-1)
- if (rasp[j][i].time<=rasp[k][i].time)
- {
- rebro reb;
- reb.yn=i;reb.yk=i;
- reb.xn=j;reb.xk=k;
- graph.push_back(reb);
- }
- }
- for (int i=0;i<ns;i++)
- for (int j=0;j<nr;j++)
- for (int k=0;k<nr;k++)
- {
- if (j!=k && rasp[i][j].time!=-1 && rasp[i][k].time!=-1)
- if (rasp[i][j].time<=rasp[i][k].time)
- {
- rebro reb;
- reb.yn=j; reb.yk=k;
- reb.xn=i; reb.xk=i;
- graph.push_back(reb);
- }
- }
- bool flag=false;
- for (int iter=0; iter<ns*nr; iter++)
- {
- flag=false;
- for (int i=0;i<graph.size();i++)
- if (rasp[graph[i].xn][graph[i].yn].able && !rasp[graph[i].xk][graph[i].yk].able)
- {
- rasp[graph[i].xk][graph[i].yk].able=true;
- flag=true;
- }
- if (!flag) break;
- }
- int mintime = 1000000001;
- for (int i=0;i<nr;i++)
- {
- if (rasp[t-1][i].able==true && rasp[t-1][i].time<mintime)
- mintime=rasp[t-1][i].time;
- }
- if (mintime==1000000001) cout<<-1;
- else cout<<mintime;
- return 0;
- }
Add Comment
Please, Sign In to add comment