제출 #1177751

#제출 시각아이디문제언어결과실행 시간메모리
1177751sasdeBridges (APIO19_bridges)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#define task "strdel"
#define ii pair<int,int>
#define iii pair<int,ii>
#define iv pair<ii,ii>
#define se second
#define fi first
#define ffi fi.fi
#define sfi se.fi
#define sse se.se
#define fse fi.se
#define lt(i, c, d) for(int i = c; i <= d; ++i)
#define fl(i, c, d) for(int i = d; i >= c; --i)
#define pb push_back
#define emb emplace_back
#define emf emplace_front
#define em emplace
using namespace std;

const int N = 5e4 + 5, mod = 1e9 + 7;
struct pt { int u, v, w; };
stack<pair<int, int>> zz;
int r[N], n, m, ans[N];
vector<pt> edges;
vector<pt> queries;
bool k[N];
unordered_map<int, int> k1;

int acs(int u) {
    while (r[u] >= 0) u = r[u];
    return u;
}

void join(int u, int v, int i) {
    u = acs(u);
    v = acs(v);
    if (u == v) return;
    
    if (r[u] > r[v]) swap(u, v);
    
    if (i == 1) zz.emplace(v, r[v]);
    
    r[u] += r[v];
    r[v] = u;
}

void rollback() {
    while (!zz.empty()) {
        auto [v, val] = zz.top();
        zz.pop();
        r[r[v]] -= val;
        r[v] = val;
    }
}

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    cin >> n >> m;
    edges.resize(m + 1);
    
    for (int i = 1; i <= m; ++i) 
        cin >> edges[i].u >> edges[i].v >> edges[i].w;
    
    int q;
    cin >> q;
    queries.resize(q + 1);
    
    for (int i = 1; i <= q; ++i) 
        cin >> queries[i].t >> queries[i].u >> queries[i].w;

    int sq = 450;
    
    for (int st = 1; st <= q; st += sq) {
        int test = min(q, st + sq - 1);
        vector<int> jo, nojo, res;
        
        for (int i = st; i <= test; ++i) {
            if (queries[i].t == 1) k[queries[i].u] = true;
            else res.push_back(i);
        }
        
        for (int i = 1; i <= m; ++i) {
            if (!k[i]) nojo.push_back(i);
            else jo.push_back(i);
        }
        
        sort(res.begin(), res.end(), [&](int x, int y) {
            return queries[x].w > queries[y].w;
        });
        
        sort(nojo.begin(), nojo.end(), [&](int x, int y) {
            return edges[x].w > edges[y].w;
        });

        memset(r, -1, sizeof(r));
        int j = 0;
        
        for (int x : res) {
            while (j < nojo.size() && edges[nojo[j]].w >= queries[x].w) {
                join(edges[nojo[j]].u, edges[nojo[j]].v, 0);
                ++j;
            }
            
            k1.clear();
            for (int z = st; z < x; ++z)
                if (queries[z].t == 1)
                    k1[queries[z].u] = z;
            
            for (int y : jo) {
                if (k1.count(y)) {
                    if (queries[k1[y]].w >= queries[x].w)
                        join(edges[y].u, edges[y].v, 1);
                } else {
                    if (edges[y].w >= queries[x].w)
                        join(edges[y].u, edges[y].v, 1);
                }
            }
            
            ans[x] = -r[acs(queries[x].u)];
            rollback();
        }
        
        for (int i = st; i <= test; ++i)
            if (queries[i].t == 1) {
                k[queries[i].u] = false;
                edges[queries[i].u].w = queries[i].w;
            }
    }
    
    for (int i = 1; i <= q; ++i)
        if (queries[i].t == 2)
            cout << ans[i] << '\n';
}

int main() {
    if (fopen(task".inp", "r")) {
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }
    
    solve();
    return 0;
}

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

bridges.cpp: In function 'void solve()':
bridges.cpp:72:27: error: '__gnu_cxx::__alloc_traits<std::allocator<pt>, pt>::value_type' {aka 'struct pt'} has no member named 't'
   72 |         cin >> queries[i].t >> queries[i].u >> queries[i].w;
      |                           ^
bridges.cpp:81:28: error: '__gnu_cxx::__alloc_traits<std::allocator<pt>, pt>::value_type' {aka 'struct pt'} has no member named 't'
   81 |             if (queries[i].t == 1) k[queries[i].u] = true;
      |                            ^
bridges.cpp:109:32: error: '__gnu_cxx::__alloc_traits<std::allocator<pt>, pt>::value_type' {aka 'struct pt'} has no member named 't'
  109 |                 if (queries[z].t == 1)
      |                                ^
bridges.cpp:127:28: error: '__gnu_cxx::__alloc_traits<std::allocator<pt>, pt>::value_type' {aka 'struct pt'} has no member named 't'
  127 |             if (queries[i].t == 1) {
      |                            ^
bridges.cpp:134:24: error: '__gnu_cxx::__alloc_traits<std::allocator<pt>, pt>::value_type' {aka 'struct pt'} has no member named 't'
  134 |         if (queries[i].t == 2)
      |                        ^
bridges.cpp: In function 'int main()':
bridges.cpp:140:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  140 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:141:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  141 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~