Untitled
unknown
c_cpp
a year ago
2.3 kB
6
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