Submission #768281

# Submission time Handle Problem Language Result Execution time Memory
768281 2023-06-27T21:06:47 Z Essa2006 Synchronization (JOI13_synchronization) C++14
0 / 100
247 ms 33180 KB
#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define endl '\n'
#define FF first
#define SS second
#define all(a) a.begin(), a.end()
#define mod (ll)(1000000007)
const int inf=1e9, lg=18;
int n, q1, q2, m, time_;
vector<int>C, Dt, Ft, Bit;
vector<vector<int>>A, Lca;
map<int, pair<int, int>>mp;
 
void pre(){
    C.clear(), Dt.clear(), Ft.clear(), Bit.clear(), A.clear(), mp.clear(), Lca.clear();
    C.resize(n+1, 1), Dt.resize(n+1), Ft.resize(n+1), Bit.resize(3*n), A.resize(n+1), Lca.resize(n+1, vector<int>(lg+1));
    m=n-1, time_=1;
}
void dfs(int u, int p){
    Dt[u]=time_++;
    Lca[u][0]=p;
    for(int j=1;j<=lg;j++){
        Lca[u][j]=Lca[Lca[u][j-1]][j-1];
    }
    for(int i=0;i<A[u].size();i++){
        int v=A[u][i];
        if(v!=p)
            dfs(v, u);
    }
    Ft[u]=time_++;
}
int g(int i){
    return i-(i&(-i));
}
int h(int i){
    return i+(i&(-i));
}
void inc(int ind, int delta){
    for (++ind; ind < n; ind += ind & -ind)
            Bit[ind] += delta;
}
int get(int ind){
    int sum=0;
    for (++ind; ind > 0; ind -= ind & -ind)
            sum += Bit[ind];
    return sum;
}
int find_root(int u){
    int lca=u;
    for(int j=lg;j>=0;j--){
        if(get(Dt[lca])==get(Dt[Lca[lca][j]]))
            lca=Lca[lca][j];
    }
    return lca;
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>q1>>q2;
    pre();
    int cnt=1;
    while(m--){
        int u, v;
        cin>>u>>v;
        A[u].push_back(v);
        A[v].push_back(u);
        mp[cnt++]={u, v};
    }
    vector<bool>Active(n);
    vector<int>Q1(q1);
    for(int i=0;i<q1;i++){
        cin>>Q1[i];
    }
    int node;
    cin>>node;
    dfs(node, node);
    for(int i=1;i<=n;i++){
        inc(Dt[i], 1);
        inc(Ft[i], -1);
    }
    for(int i=0;i<q1;i++){
        int id=Q1[i];
        int u=mp[id].FF, v=mp[id].SS;
        if(Dt[u]>Dt[v])
            swap(u, v);
        if(!Active[id]){
            int root=find_root(u);
            C[root]+=C[v];
            C[v]=0;
            inc(Dt[v], -1);
            inc(Ft[v], 1);
        }
        else if(Active[id]){
            inc(Dt[v], 1);
            inc(Ft[v], -1);
        }
        Active[id]=!Active[id];
    }
    cout<<C[node];
}

Compilation message

synchronization.cpp: In function 'void dfs(int, int)':
synchronization.cpp:26:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     for(int i=0;i<A[u].size();i++){
      |                 ~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Incorrect 1 ms 340 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 117 ms 30268 KB Output is correct
2 Correct 112 ms 28508 KB Output is correct
3 Incorrect 126 ms 32204 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 247 ms 33180 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -