# include using namespace std; int n,m,t,f,d; const int diff = 15; pair stations[1005]; mt19937 Rand(156958); const int MAX = 500; const clock_t begin_time = clock(); const float Time = 4.0; struct bus { int len; vector stat; vector stat2; vector statf; vector clients; vector times; vector times2; vector timesf; vector > swv; int curr,time; int L,R; int starttime; int whole; }; long long BESTANS=1e18; bus b[1005]; struct tourists { int num,time,st; }; tourists tour[1005]; void read() { cin>>n; int i,j; for(i=1;i<=n;i++) { cin>>stations[i].first>>stations[i].second; } cin>>m; // cout<>b[i].L>>b[i].R; b[i].len = 0; b[i].curr=-1; b[i].time = 0; } cin>>t>>f; for(i=1;i<=f;i++) { cin>>tour[i].time>>tour[i].st>>tour[i].num; } cin>>d; } bool cmptour(tourists i, tourists j) { if(i.time==j.time)return i.num>j.num; return i.time> sta; vector swv; vector V; int vis[1005],visid=1; void addstation(int v, int BUSS) { int i; vis[v]=visid; //cout<<"&& "<dist(v,V[i])) { mindist=dist(v,V[i]); u = V[i]; } } if(mindist==1e9)return ; addstation(u,BUSS); } void solvefor1bus(int BUSS) { int i; if(m==1) for(i=1;i<=f;i++) { b[BUSS].clients.push_back(i); } b[BUSS].curr=-1; visid++; swv.clear(); for(i=0;i0)b[i].stat.push_back(b[i].stat[0]); calcwhole(i); for(j=0;j0) b[i].times.push_back(sta[sta.size()-1].first); long long ANS = 0; int k = 0; for(j=0;j0)b[i].stat2.push_back(b[i].stat2[0]); calcwhole2(i); for(j=0;j0) b[i].times2.push_back(sta[sta.size()-1].first); long long ANS2 = 0; k = 0; for(j=0;j st; struct CLIENTSONSTATION { int num; vector st; vector times; vector clients; int mindist; }; CLIENTSONSTATION CL[1005]; vector vect; bool cmpCLIENTSONSTATION(CLIENTSONSTATION i, CLIENTSONSTATION j) { if(i.mindist==j.mindist)return i.num > bvect; long long calcANS(int v) { // cout<<"&&&&&&&&&&&& "<m)return false; int j; for(i=1;i<=n;i++) { if(CL[i].st.size()==0)continue; sort(CL[i].st.begin(),CL[i].st.end()); CL[i].times.push_back(CL[i].st[0]); for(j=1;j=0;j--) { if(vect[i].times[j+1]-vect[i].times[j]>bvect[i].first) { st.push(vect[i].times[j]); } } while(!st.empty()) { b[buss].times2.push_back(st.top()); st.pop(); } for(j=0;j0) { if(nbr=0;j--) { if(b[i].times2[j]+b[i].R<=b[i].times2[j+1])st.push(b[i].times2[j]); } while(!st.empty()) { b[i].times.push_back(st.top()); st.pop(); } }*/ return true; } bool checkforenoughbussesprev() { memset(vis,0,sizeof(vis)); visid++; int i,br=0; for(i=1;i<=f;i++) { if(vis[tour[i].st]!=visid){vis[tour[i].st]=visid; br++;} } if(br>m)return false; memset(vis,0,sizeof(vis)); int nbr=br; br=0; for(i=1;i<=m;i++) { b[i].stat2.clear(); b[i].times2.clear(); b[i].clients.clear(); } for(i=1;i<=f;i++) { int u = tour[i].st; if(vis[u]==0){br++;vis[u]=br; b[vis[u]].stat2.push_back(u); b[vis[u]].stat2.push_back(u);} else if(tour[i].time - b[vis[u]].clients[b[vis[u]].clients.size()-1]0) { if(nbr=0;j--) { if(b[i].times2[j]+b[i].R<=b[i].times2[j+1])st.push(b[i].times2[j]); } b[i].times2.clear(); while(!st.empty()) { b[i].times2.push_back(st.top()); st.pop(); } } long long ANS = 0; for(i=1;i<=m;i++)ANS+=calcANS(i); if(ANS SET; pair dp[1005]; void calcdp(int v) { int i,j; for(i=0;i=0;j--) { if(b[v].swv[i].first-b[v].swv[j].first>=b[v].whole) { if(minans>(sum+dp[j].first)) { minans=sum+dp[j].first; ids = j; } } sum+=(b[v].swv[i].first-b[v].swv[j].first)*b[v].swv[j].second; } if(minans>sum) { minans=sum; ids = -1; } dp[i].first= minans; dp[i].second = ids; } int k = b[v].swv.size()-1; while(k!=-1) { b[v].times2.push_back(b[v].swv[k].first); k = dp[k].second; } sort(b[v].times2.begin(),b[v].times2.end()); } void solveaddstationswhileyoucan(int maxnum) { clearall2(); memset(vis,0,sizeof(vis)); int i,j; SET.clear(); for(i=1;i<=f;i++) SET.insert(tour[i].st); for(i=1;i<=m;i++) { b[i].swv.clear(); int v=-1; int x = 1e9,y=1e9; for(auto it:SET){if(vis[it]==0){ if(stations[it].first0)b[i].stat2.push_back(b[i].stat2[0]); calcwhole2(i); sum+=(b[i].whole-b[i].R); } for(i=1;i<=m;i++) { b[i].swv.clear(); if(b[i].stat2.size()==0)continue; calcwhole2(i);//cout<d)continue; for(j=0;jb[i].times2[k]){k++;br=0;} // cout<<"** "<=b[i].times2[k]||(k>0&&b[i].times2[k-1]+b[i].whole>=b[i].swv[j].first))continue; if((b[i].times2[k]-b[i].swv[j].first)*br>maxs) { maxs = (b[i].times2[k]-b[i].swv[j].first)*br; ids = i; pos = b[i].swv[j].first; } } } if(ids==-1)break ; // cout<0)b[i].stat2.push_back(b[i].stat2[0]); calcwhole2(i); sum+=b[i].whole-b[i].R; } for(i=1;i<=m;i++) { swv.clear(); if(b[i].stat2.size()==0)continue; calcwhole2(i);//cout<=0;j--) { if(swv[j]+b[i].whole<=st.top()&&(sum+b[i].whole-b[i].R<=d)){sum+=(b[i].whole-b[i].R);st.push(swv[j]);} } while(!st.empty()) { b[i].times2.push_back(st.top());st.pop();} } long long ANS=0; for(i=1;i<=m;i++) { // cout<0)b[i].stat2.push_back(b[i].stat2[0]); calcwhole2(i); sum+=b[i].whole-b[i].R; } for(i=1;i<=m;i++) { swv.clear(); if(b[i].stat2.size()==0)continue; calcwhole2(i);//cout<=0;j--) { if(swv[j]+b[i].whole<=st.top()&&(sum+b[i].whole-b[i].R<=d)){sum+=(b[i].whole-b[i].R);st.push(swv[j]);} } while(!st.empty()) { b[i].times2.push_back(st.top());st.pop();} } long long ANS=0; for(i=1;i<=m;i++) ANS += calcANS(i); //cout<<"**"<