제출 #547782

#제출 시각아이디문제언어결과실행 시간메모리
547782blueCollapse (JOI18_collapse)C++17
5 / 100
15062 ms4548 KiB
#include "collapse.h" #include <vector> #include <algorithm> #include <set> #include <queue> #include <iostream> using namespace std; using vi = vector<int>; using vvi = vector<vi>; using pii = pair<int, int>; #define sz(x) int(x.size()) const int bs = 250; vi simulateCollapse(int N, vi T, vi X, vi Y, vi W, vi P) { int C = sz(T); int Q = sz(W); for(int i = 0; i < C; i++) { if(X[i] > Y[i]) swap(X[i], Y[i]); } vi res(Q); for(int q = 0; q < Q; q++) { set<pii> edges; for(int i = 0; i <= W[q]; i++) { if(X[i] <= P[q] && P[q]+1 <= Y[i]) continue; if(T[i] == 0) edges.insert({X[i], Y[i]}); else edges.erase({X[i], Y[i]}); } vi edge[N]; for(auto& z : edges) { edge[z.first].push_back(z.second); edge[z.second].push_back(z.first); } int comps = 0; vi vis(N, 0); queue<int> tbv; for(int i = 0; i < N; i++) { if(vis[i]) continue; comps++; vis[i] = 1; tbv.push(i); while(!tbv.empty()) { int u = tbv.front(); tbv.pop(); for(int v : edge[u]) { if(vis[v]) continue; tbv.push(v); vis[v] = 1; } } } res[q] = comps; // cout << comps << '\n'; } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...