Untitled
unknown
c_cpp
5 months ago
2.3 kB
2
Indexable
#include<bits/stdc++.h> #pragma GCC optimize("O3") #define F first #define S second #define PB push_back #define MP make_pair #define all(c) c.begin(), c.end() #define endl "\n" #define sz(u) (int)(u.size()) #define L(x)(2*x) #define R(x)(2*x+1) #define M(x,y)((x+y)/2) typedef long long ll; typedef unsigned long long ull; using namespace std; const int K = 40; struct Edge{ int u,v; vector<bool> available; }; struct Service{ int s,d,S,L,R,V; vector<int> edges; //edges contains the id of the edges that are part of the service }; signed main(){ int N,M; cin>>N>>M; vector<int> P(N+1); // 0 <= P(i) <= 20 for(int i=1;i<=N;i++)cin>>P[i]; vector<Edge> E(M+1); for(int i=1;i<=M;i++){ cin>>E[i].u>>E[i].v; E[i].available = vector<bool>(K+1,true); } // input of services int J; cin>>J; vector<Service> S(J+1); for(int i=0;i<J;i++){ cin>>S[i].s>>S[i].d>>S[i].S>>S[i].L>>S[i].R>>S[i].V; for(int j=0;j<S[i].S;j++){ int x; cin>>x; S[i].edges.PB(x); for(int k=S[i].L;k<=S[i].R;k++) E[x].available[k] = false; } } int TESTS; cin>>TESTS; while(TESTS--){ int e_failed; cin>>e_failed; // e_failed is the id of the edge that failed vector<Service> replan; // Services that need to be replanned for(int i=0;i<J;i++){ bool flag = false; for(int j=0;j<S[i].S;j++){ if(S[i].edges[j]==e_failed){ flag = true; break; } } if(flag)replan.PB(S[i]); } // create copy of Edges vector<Edge> E_new (M+1); for(int i=1;i<=M;i++) E_new[i].available = E[i].available, E_new[i].u = E[i].u, E_new[i].v = E[i].v; // sort the services in decreasing order of V sort(all(replan),[](Service a,Service b){ return a.V>b.V; }); // build the graph with the failed edge removed vector<vector<pair<int,int>>> G(N+1); for(Service serv:replan){ int s = serv.s, d = serv.d; // bfs queue<int> q; vector<bool> vis(N+1,false); } } }
Editor is loading...
Leave a Comment