Untitled

 avatar
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