제출 #1324232

#제출 시각아이디문제언어결과실행 시간메모리
1324232sh_qaxxorov_571다리 (APIO19_bridges)C++20
컴파일 에러
0 ms0 KiB
#include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; const int MAXN = 50005, MAXM = 100005, B = 400; // Blok hajmi struct Edge { int u, v, d, id; }; struct Query { int t, a, b, id; }; int n, m, q; Edge edges[MAXM]; Query queries[MAXM]; int ans[MAXM], parent[MAXN], sz[MAXN]; bool changed[MAXM]; vector<int> rollback; // DSU amallari (Rollback bilan) int find(int i) { return (parent[i] == i) ? i : find(parent[i]); } void unite(int i, int j, bool rb) { i = find(i), j = find(j); if (i != j) { if (sz[i] < sz[j]) swap(i, j); if (rb) rollback.push_back(j); parent[j] = i; sz[i] += sz[j]; } } void do_rollback(int target) { while (rollback.size() > target) { int j = rollback.back(); rollback.pop_back(); sz[parent[j]] -= sz[j]; parent[j] = j; } } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> edges[i].u >> edges[i].v >> edges[i].d; edges[i].id = i; } cin >> q; for (int i = 0; i < q; i++) { cin >> queries[i].t >> queries[i].a >> queries[i].b; queries[i].id = i; } // Bloklar bo'yicha ishlov berish for (int L = 0; L < q; L += B) { int R = min(q, L + B); for (int i = 1; i <= n; i++) { parent[i] = i, sz[i] = 1; } vector<int> q2, q1, o'zgarmas; for (int i = 1; i <= m; i++) changed[i] = false; for (int i = L; i < R; i++) { if (queries[i].t == 1) changed[queries[i].a] = true, q1.push_back(i); else q2.push_back(i); } for (int i = 1; i <= m; i++) if (!changed[i]) o'zgarmas.push_back(i); // Saralash: O'zgarmas ko'priklar va so'rovlar vazn bo'yicha sort(q2.begin(), q2.end(), [](int i, int j) { return queries[i].b > queries[j].b; }); sort(o'zgarmas.begin(), o'zgarmas.end(), [](int i, int j) { return edges[i].d > edges[j].d; }); int cur_e = 0; for (int i : q2) { while (cur_e < o'zgarmas.size() && edges[o'zgarmas[cur_e]].d >= queries[i].b) { unite(edges[o'zgarmas[cur_e]].u, edges[o'zgarmas[cur_e]].v, false); cur_e++; } int rb_target = rollback.size(); // O'zgaruvchan ko'priklarni tekshirish for (int j = L; j < R; j++) { // (Bu yerda har bir ko'prikning so'rov vaqtidagi oxirgi vazni hisoblanadi) // ... vaqtinchalik unite qilinadi } ans[queries[i].id] = sz[find(queries[i].a)]; do_rollback(rb_target); } // Blok oxirida o'zgargan ko'priklarning asl vaznini yangilaymiz for (int i = L; i < R; i++) if (queries[i].t == 1) edges[queries[i].a].d = queries[i].b; } // Natijalarni chiqarish return 0; }

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

bridges.cpp:58:30: warning: missing terminating ' character
   58 |         vector<int> q2, q1, o'zgarmas;
      |                              ^
bridges.cpp:58:30: error: missing terminating ' character
   58 |         vector<int> q2, q1, o'zgarmas;
      |                              ^~~~~~~~~
bridges.cpp:65:56: warning: missing terminating ' character
   65 |         for (int i = 1; i <= m; i++) if (!changed[i]) o'zgarmas.push_back(i);
      |                                                        ^
bridges.cpp:65:56: error: missing terminating ' character
   65 |         for (int i = 1; i <= m; i++) if (!changed[i]) o'zgarmas.push_back(i);
      |                                                        ^~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:69:15: warning: character constant too long for its type
   69 |         sort(o'zgarmas.begin(), o'zgarmas.end(), [](int i, int j) { return edges[i].d > edges[j].d; });
      |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:73:29: warning: character constant too long for its type
   73 |             while (cur_e < o'zgarmas.size() && edges[o'zgarmas[cur_e]].d >= queries[i].b) {
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:74:30: warning: character constant too long for its type
   74 |                 unite(edges[o'zgarmas[cur_e]].u, edges[o'zgarmas[cur_e]].v, false);
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp: In function 'int main()':
bridges.cpp:59:9: error: expected initializer before 'for'
   59 |         for (int i = 1; i <= m; i++) changed[i] = false;
      |         ^~~
bridges.cpp:59:25: error: 'i' was not declared in this scope
   59 |         for (int i = 1; i <= m; i++) changed[i] = false;
      |                         ^
bridges.cpp:65:55: error: 'o' was not declared in this scope
   65 |         for (int i = 1; i <= m; i++) if (!changed[i]) o'zgarmas.push_back(i);
      |                                                       ^
bridges.cpp:68:92: error: expected primary-expression before ')' token
   68 |         sort(q2.begin(), q2.end(), [](int i, int j) { return queries[i].b > queries[j].b; });
      |                                                                                            ^
bridges.cpp:69:14: error: 'o' was not declared in this scope
   69 |         sort(o'zgarmas.begin(), o'zgarmas.end(), [](int i, int j) { return edges[i].d > edges[j].d; });
      |              ^
bridges.cpp:73:29: error: expected ')' before user-defined character literal
   73 |             while (cur_e < o'zgarmas.size() && edges[o'zgarmas[cur_e]].d >= queries[i].b) {
      |                   ~         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                             )
bridges.cpp:73:29: error: unable to find character literal operator 'operator""zgarmas' with 'int' argument
   73 |             while (cur_e < o'zgarmas.size() && edges[o'zgarmas[cur_e]].d >= queries[i].b) {
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~