제출 #1316100

#제출 시각아이디문제언어결과실행 시간메모리
1316100panhcutizzColors (RMI18_colors)C++17
0 / 100
112 ms21684 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; #define ll long long #define vi vector <int> #define pi pair<int , int> #define FOR(i , l , r) for(int i = l; i <= r; ++ i) #define FORD(i , l , r) for(int i = l; i >= r; -- i) #define all(v) begin(v) , end(v) #define compact(v) v.erase(unique(all(v)) , v.end()) #define pb push_back #define eb emplace_back #define fi first #define se second #define anhHieuchimbe signed main template <class T> bool maximize(T &a , T b){return (a < b) ? a = b , true : false;} template <class T> bool minimize(T &a , T b){return (a > b) ? a = b , true : false;} const int nd = 1e5 + 5; int A[nd] , B[nd]; bool valid[nd]; vi adj[nd]; namespace dsu{ int par[nd] , sz[nd] , used[nd]; int totalUp; vector <pi> upPar , upSz , upVal; void init(int n){ FOR(i , 1 , n) par[i] = i , sz[i] = 1 , used[i] = valid[i]; totalUp = 0; } int get(int u){return u == par[u] ? u : get(par[u]);} void unite(int u , int v){ u = get(u) , v = get(v); if(u == v) return; if(sz[u] > sz[v]) swap(u , v); upPar.eb(u , par[u]); par[u] = v; upSz.eb(v , sz[v]); sz[v] += sz[u]; upVal.eb(v , used[v]); used[v] |= used[u]; ++ totalUp; } void roll_back(int snapShot){ while(totalUp > snapShot){ par[upPar.back().fi] = upPar.back().se; sz[upSz.back().fi] = upSz.back().se; used[upVal.back().fi] = upVal.back().se; upPar.pop_back(); upSz.pop_back(); upVal.pop_back(); -- totalUp; } } } namespace ST{ vector <pi> st[4 * nd]; vi query[4 * nd]; bool vis[nd]; void init(int n){ ++ n; FOR(i , 0 , 4 * n) st[i].clear() , query[i].clear(); FOR(i , 1 , n) vis[i] = false; } void up(int id , int l , int r , int a , int b , int u , int f){ if(l > b || r < a) return; if(a <= l && r <= b){ st[id].eb(f , u); return; } int mid = (r + l) >> 1; up(id * 2 , l , mid , a , b , u , f); up(id * 2 + 1 , mid + 1 , r , a , b , u , f); } void queryUp(int id , int l , int r , int x , int u){ if(l > x || r < x) return; if(l == r){ query[id].eb(u); return; } int mid = (r + l) >> 1; queryUp(id * 2 , l , mid , x , u); queryUp(id * 2 + 1 , mid + 1 , r , x , u); } bool build(int id , int l , int r){ int snapShot = dsu::totalUp; sort(all(st[id])); for(auto [f , u] : st[id]){ vis[u] = true; for(int v : adj[u]) if(vis[v]){ dsu::unite(u , v); } } if(l < r){ int mid = (r + l) >> 1; bool res = build(id * 2 , l , mid) & build(id * 2 + 1 , mid + 1 , r); dsu::roll_back(snapShot); for(auto [f , u] : st[id]) vis[u] = false; return res; } else{ bool res = true; for(int u : query[id]){ res &= dsu::used[dsu::get(u)]; } dsu::roll_back(snapShot); for(auto [u , f] : st[id]) vis[u] = false; return res; } } } void solve(){ int n , m; cin >> n >> m; ST::init(n); FOR(i , 1 , n) adj[i].clear(); FOR(i , 1 , n) cin >> A[i]; FOR(i , 1 , n){ cin >> B[i]; if(B[i] > A[i]){ cout << 0; return; } valid[i] = (A[i] == B[i]); ST::up(1 , 1 , n , B[i] , A[i] , i , (A[i] != B[i])); ST::queryUp(1 , 1 , n , B[i] , i); } FOR(i , 1 , m){ int u , v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } dsu::init(n); cout << ST::build(1 , 1 , n) << '\n'; } anhHieuchimbe() { ios_base::sync_with_stdio(false); cin.tie(0); #define task "task" if(fopen(task".inp" , "r")){ freopen(task".inp" , "r" , stdin); freopen(task".out" , "w" , stdout); } int test_case = 0; cin >> test_case; while(test_case --) solve(); }

컴파일 시 표준 에러 (stderr) 메시지

colors.cpp: In function 'int main()':
colors.cpp:175:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  175 |         freopen(task".inp" , "r" , stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
colors.cpp:176:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  176 |         freopen(task".out" , "w" , stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...