제출 #400655

#제출 시각아이디문제언어결과실행 시간메모리
400655iulia13늑대인간 (IOI18_werewolf)C++14
컴파일 에러
0 ms0 KiB
#include "werewolf.h" #include <iostream> #include <algorithm> #include <vector> using namespace std; ifstream cin ("g.in"); ofstream cout ("g.out"); #define pb push_back const int MAX_N = 4e5 + 5; const int MAX_LOG = 20; vector <int> g[MAX_N]; vector <int> T1[MAX_N]; vector <int> T2[MAX_N]; int dad1[MAX_N][MAX_LOG], dad2[MAX_N][MAX_LOG]; int set1[MAX_N], set2[MAX_N]; int S(int x, int SET[]) { if (x != SET[x]) return x = S(SET[x], SET); else return x; } void unire(int x, int y, int SET[], int dad[MAX_N][MAX_LOG]) { int xx = S(x, SET); int yy = S(y, SET); if (xx == yy) return; dad[yy][0] = x; SET[yy] = x; } void arb(int dad[MAX_N][MAX_LOG], int n, vector <int> T[]) { for (int i = 1; i <= n; i++) { T[i].pb(dad[i][0]); T[dad[i][0]].pb(i); } } int timp; int in1[MAX_N], out1[MAX_N], in2[MAX_N], out2[MAX_N]; int intime[MAX_N], outtime[MAX_N]; void dfs1(int nod, int dad = 0) { in1[nod] = ++timp; for (auto x : T1[nod]) { if (x == dad || !x) continue; dfs1(x, nod); } out1[nod] = timp; } int aib[MAX_N * 2]; int N; int lsb(int x) { return x & (-x); } int query(int pz) { int s = 0; while (pz > 0) { s += aib[pz]; pz -= lsb(pz); } return s; } void update(int pz, int val) { while (pz <= N) { aib[pz] += val; pz += lsb(pz); } } void dfs2(int nod, int dad = 0) { in2[nod] = ++timp; intime[timp] = nod; for (auto x : T2[nod]) { if (x == dad || !x) continue; dfs2(x, nod); } out2[nod] = timp; } struct Interval{ int x, l, r, tip, ind; }; bool cmp(Interval a, Interval b) { return a.x < b.x; } Interval interv[MAX_N]; vector <int> A; vector <int> check_validity(int n, vector <int> X, vector <int> Y, vector <int> S, vector <int> E, vector <int> L, vector <int> R) { int i; N = n; for (i = 0; i < X.size(); i++) { g[X[i] + 1].pb(Y[i] + 1); g[Y[i] + 1].pb(X[i] + 1); } for (i = 1; i <= n; i++) set1[i] = set2[i] = i; ///pt l <= for (i = 1; i <= n; i++) for (auto x : g[i]) if (x < i) unire(i, x, set1, dad1); arb(dad1, n, T1); timp = 0; dfs1(n); ///pt <= r for (i = n; i; i--) for (auto x : g[i]) if (i < x) unire(i, x, set2, dad2); arb(dad2, n, T2); timp = 0; dfs2(1); ///LIFT for (int j = 1; j < MAX_LOG; j++) for (i = 1; i <= n; i++) { dad1[i][j] = dad1[dad1[i][j - 1]][j - 1]; dad2[i][j] = dad2[dad2[i][j - 1]][j - 1]; } int cnt = 0; for (i = 0; i < S.size(); i++) { int s = S[i], e = E[i], l = L[i], r = R[i]; s++, e++, l++, r++; int lg = MAX_LOG - 1; while (0 <= lg) { if (l <= dad2[s][lg]) s = dad2[s][lg]; lg--; } lg = MAX_LOG - 1; while (0 <= lg) { if (dad1[e][lg] && dad1[e][lg] <= r) e = dad1[e][lg]; lg--; } interv[++cnt] = {in2[s] - 1, in1[e], out1[e], -1, i}; interv[++cnt] = {out2[s], in1[e], out1[e], 1, i}; } sort(interv + 1, interv + cnt + 1, cmp); A.resize(S.size()); int j = 1; for (i = 1; i <= cnt; i++) { while (j <= interv[i].x) { update(in1[intime[j]], 1); j++; } A[interv[i].ind] += interv[i].tip * (query(interv[i].r) - query(interv[i].l - 1)); } for (i = 0; i < A.size(); i++) if (A[i] > 0) A[i] = 1; else A[i] = 0; return A; }/* vector <int> x; vector <int> y; vector <int> s; vector <int> e; vector <int> l; vector <int> r; int main() { int n, m, q, i; cin >> n >> m >> q; x.resize(m); y.resize(m); for (i = 0; i < m; i++) cin >> x[i]; for (i = 0; i < m; i++) cin >> y[i]; s.resize(q); e.resize(q); l.resize(q); r.resize(q); for (i = 0; i < q; i++) cin >> s[i]; for (i = 0; i < q; i++) cin >> e[i]; for (i = 0; i < q; i++) cin >> l[i]; for (i = 0; i < q; i++) cin >> r[i]; vector <int> aaa = check_validity(n, x, y, s, e, l, r); aaa.resize(q); for(i = 0; i < q; i++) cout << aaa[i]; return 0; }*/

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

werewolf.cpp:7:14: error: variable 'std::ifstream cin' has initializer but incomplete type
    7 | ifstream cin ("g.in");
      |              ^
werewolf.cpp:8:15: error: variable 'std::ofstream cout' has initializer but incomplete type
    8 | ofstream cout ("g.out");
      |               ^
werewolf.cpp: In function 'std::vector<int> check_validity(int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
werewolf.cpp:105:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |     for (i = 0; i < X.size(); i++)
      |                 ~~^~~~~~~~~~
werewolf.cpp:142:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  142 |     for (i = 0; i < S.size(); i++)
      |                 ~~^~~~~~~~~~
werewolf.cpp:175:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  175 |     for (i = 0; i < A.size(); i++)
      |                 ~~^~~~~~~~~~