제출 #1231580

#제출 시각아이디문제언어결과실행 시간메모리
1231580LIARoller Coaster Railroad (IOI16_railroad)C++17
0 / 100
114 ms14300 KiB
#include <bits/stdc++.h> using namespace std; struct DSU { vector <int> p , sz; DSU (int n): p(n), sz(n ,1) { iota(p.begin() ,p.end() ,0); } int find (int x) { return x == p[x] ? x : p[x] = find(p[x]); } void unite (int a,int b) { a = find(a); b = find(b); if (a == b) return; if (sz[a] < sz[b]) swap(a ,b); p[b] = a; sz[a] += sz[b]; } }; long long plan_roller_coaster (vector <int> s,vector <int> t) { int n = s.size(); const long long INF = 2000000005LL; vector <long long> v; v.reserve(2 * n + 2); v.push_back(1); for (int i = 0 ; i < n ; i++) { v.push_back(s[i]); v.push_back(t[i]); } v.push_back(INF); sort(v.begin() ,v.end()); v.erase(unique(v.begin() ,v.end()) ,v.end()); int m = v.size(); auto id = [&] (long long x) { return int(lower_bound(v.begin() ,v.end() ,x) - v.begin()); }; vector <long long> diff(m + 1 ,0); DSU dsu(m); vector <int> used; used.reserve(2 * n + 2); for (int i = 0 ; i < n ; i++) { int a = id(s[i]) , b = id(t[i]); used.push_back(a); used.push_back(b); dsu.unite(a ,b); if (t[i] > s[i]) { diff[a]++; diff[b]--; } else if (t[i] < s[i]) { diff[a]--; diff[b]++; } } int a = id(INF) , b = id(1LL); used.push_back(a); used.push_back(b); dsu.unite(a ,b); diff[a]--; diff[b]++; long long bal = 0; for (int i = 0 ; i < m - 1 ; i++) { bal += diff[i]; if (bal) return 1; } int root = dsu.find(used[0]); for (int x : used) if (dsu.find(x) != root) return 1; return 0; }

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

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...