답안 #211409

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
211409 2020-03-20T10:07:58 Z VEGAnn 다리 (APIO19_bridges) C++14
46 / 100
3000 ms 19564 KB
#include <bits/stdc++.h>
#define all(x) x.begin(),x.end()
#define sz(x) ((int)x.size())
#define pll pair<ll, ll>
#define MP make_pair
#define PB push_back
#define pii pair<int, int>
#define pi3 pair<pii, int>
#define ft first
#define sd second
#define MP3(a,b,c) MP(MP(a,b),c)
using namespace std;
typedef long long ll;
const int N = 50100;
const int M = 100100;
const int Q = 100100;
const int CO = 200100;
const int oo = 2e9;
const int B = 316;
//const int B = 2;
const int MB = M / B + 10;
stack<pi3> stk;
vector<int> g[N], vc, ed[CO], vec, qr;
int n, m, U[M], V[M], D[M], q, ans[Q], tt = 0, mrk[M], loc[M];
int vls[B][B], tp[Q], l[Q], r[Q], siz[N], pr[N];

bool cmp(int x, int y){
    return r[x] > r[y];
}

int get(int x){ return (x == pr[x] ? x : get(pr[x])); }

void link(int x, int y){
    x = get(x);
    y = get(y);

    if (x == y) return;

    if (siz[x] < siz[y]) swap(x, y);

    stk.push(MP3(x, y, pr[y]));
    pr[y] = x;
    siz[x] += siz[y];
}

int main(){

#ifdef _LOCAL
    freopen("in.txt","r",stdin);
#else
    ios_base::sync_with_stdio(0); cin.tie(0);
#endif // _LOCAL

    cin >> n >> m;

    for (int i = 0; i < m; i++){
        cin >> U[i] >> V[i] >> D[i];
        U[i]--; V[i]--;

        g[U[i]].PB(i);
        g[V[i]].PB(i);
        vc.PB(D[i]);
    }

    cin >> q;

    for (int i = 0; i < q; i++) {
        cin >> tp[i] >> l[i] >> r[i];
        l[i]--;
        vc.PB(r[i]);
    }

    sort(all(vc));
    vc.resize(unique(all(vc)) - vc.begin());

    for (int i = 0; i < m; i++)
        D[i] = lower_bound(all(vc), D[i]) - vc.begin();

    for (int i = 0; i < q; i++)
        r[i] = lower_bound(all(vc), r[i]) - vc.begin();

    for (int it = 0; it < q; it += B){
        int bd = min(q, it + B);

        tt++;
        vec.clear();
        qr.clear();

        for (int i = it; i < bd; i++)
            if (tp[i] == 1) {
                if (mrk[l[i]] < tt) {
                    mrk[l[i]] = tt;
                    loc[l[i]] = sz(vec);
                    vec.PB(l[i]);
                }
            } else qr.PB(i);

        for (int i = it; i < bd; i++){
            int nm = i - it;

            if (i == it){
                for (int j = 0; j < sz(vec); j++)
                    vls[nm][j] = D[vec[j]];
            } else {
                for (int j = 0; j < sz(vec); j++)
                    vls[nm][j] = vls[nm - 1][j];
            }

            if (tp[i] == 1)
                vls[nm][loc[l[i]]] = r[i];
        }

        for (int i = 0; i < m; i++)
            if (mrk[i] < tt)
                ed[D[i]].PB(i);

        for (int i = 0; i < n; i++){
            siz[i] = 1;
            pr[i] = i;
        }

        if (sz(qr)){
            sort(all(qr), cmp);
        }

        while (sz(stk)) stk.pop();
        int lst = sz(vc) - 1;

        for (int nm : qr){
            while (lst >= 0 && lst >= r[nm]){

                if (sz(ed[lst])){
                    for (int nw : ed[lst])
                        link(U[nw], V[nw]);
                    ed[lst].clear();
                }

                lst--;
            }

            int mem = sz(stk);

            int gt = nm - it;

            for (int i = 0; i < sz(vec); i++)
                if (vls[gt][i] >= r[nm])
                    link(U[vec[i]], V[vec[i]]);

            ans[nm] = siz[get(l[nm])];

            while (sz(stk) > mem){
                pi3 cr = stk.top();
                stk.pop();

                siz[cr.ft.ft] -= siz[cr.ft.sd];
                pr[cr.ft.sd] = cr.sd;
            }
        }

        while (lst >= 0){
            ed[lst].clear();
            lst--;
        }

        //end
        for (int i = 0; i < sz(vec); i++)
            D[vec[i]] = vls[bd - it - 1][i];
    }

    for (int i = 0; i < q; i++)
        if (tp[i] == 2)
            cout << ans[i] << '\n';

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 6272 KB Output is correct
2 Correct 7 ms 6144 KB Output is correct
3 Correct 24 ms 7040 KB Output is correct
4 Correct 15 ms 6528 KB Output is correct
5 Correct 17 ms 6912 KB Output is correct
6 Correct 15 ms 6912 KB Output is correct
7 Correct 17 ms 6912 KB Output is correct
8 Correct 20 ms 6912 KB Output is correct
9 Correct 20 ms 6912 KB Output is correct
10 Correct 20 ms 6912 KB Output is correct
11 Correct 22 ms 6912 KB Output is correct
12 Correct 21 ms 6912 KB Output is correct
13 Correct 22 ms 6912 KB Output is correct
14 Correct 24 ms 6912 KB Output is correct
15 Correct 22 ms 6912 KB Output is correct
16 Correct 18 ms 6912 KB Output is correct
17 Correct 19 ms 6912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2574 ms 15732 KB Output is correct
2 Correct 2525 ms 15804 KB Output is correct
3 Correct 2457 ms 15908 KB Output is correct
4 Correct 2505 ms 16084 KB Output is correct
5 Correct 2541 ms 15756 KB Output is correct
6 Correct 2435 ms 16920 KB Output is correct
7 Correct 2522 ms 18708 KB Output is correct
8 Correct 2429 ms 18408 KB Output is correct
9 Correct 99 ms 9844 KB Output is correct
10 Correct 761 ms 14576 KB Output is correct
11 Correct 753 ms 14444 KB Output is correct
12 Correct 1771 ms 17404 KB Output is correct
13 Correct 2442 ms 19564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1400 ms 13804 KB Output is correct
2 Correct 528 ms 11248 KB Output is correct
3 Correct 1427 ms 16104 KB Output is correct
4 Correct 1452 ms 16236 KB Output is correct
5 Correct 106 ms 9972 KB Output is correct
6 Correct 1428 ms 16252 KB Output is correct
7 Correct 1357 ms 16412 KB Output is correct
8 Correct 1328 ms 16112 KB Output is correct
9 Correct 1167 ms 14956 KB Output is correct
10 Correct 1182 ms 15212 KB Output is correct
11 Correct 1322 ms 17132 KB Output is correct
12 Correct 1292 ms 17260 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3097 ms 15596 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2574 ms 15732 KB Output is correct
2 Correct 2525 ms 15804 KB Output is correct
3 Correct 2457 ms 15908 KB Output is correct
4 Correct 2505 ms 16084 KB Output is correct
5 Correct 2541 ms 15756 KB Output is correct
6 Correct 2435 ms 16920 KB Output is correct
7 Correct 2522 ms 18708 KB Output is correct
8 Correct 2429 ms 18408 KB Output is correct
9 Correct 99 ms 9844 KB Output is correct
10 Correct 761 ms 14576 KB Output is correct
11 Correct 753 ms 14444 KB Output is correct
12 Correct 1771 ms 17404 KB Output is correct
13 Correct 2442 ms 19564 KB Output is correct
14 Correct 1400 ms 13804 KB Output is correct
15 Correct 528 ms 11248 KB Output is correct
16 Correct 1427 ms 16104 KB Output is correct
17 Correct 1452 ms 16236 KB Output is correct
18 Correct 106 ms 9972 KB Output is correct
19 Correct 1428 ms 16252 KB Output is correct
20 Correct 1357 ms 16412 KB Output is correct
21 Correct 1328 ms 16112 KB Output is correct
22 Correct 1167 ms 14956 KB Output is correct
23 Correct 1182 ms 15212 KB Output is correct
24 Correct 1322 ms 17132 KB Output is correct
25 Correct 1292 ms 17260 KB Output is correct
26 Correct 2459 ms 18808 KB Output is correct
27 Correct 2605 ms 18592 KB Output is correct
28 Correct 2583 ms 18832 KB Output is correct
29 Correct 2919 ms 18432 KB Output is correct
30 Execution timed out 3078 ms 18144 KB Time limit exceeded
31 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 6272 KB Output is correct
2 Correct 7 ms 6144 KB Output is correct
3 Correct 24 ms 7040 KB Output is correct
4 Correct 15 ms 6528 KB Output is correct
5 Correct 17 ms 6912 KB Output is correct
6 Correct 15 ms 6912 KB Output is correct
7 Correct 17 ms 6912 KB Output is correct
8 Correct 20 ms 6912 KB Output is correct
9 Correct 20 ms 6912 KB Output is correct
10 Correct 20 ms 6912 KB Output is correct
11 Correct 22 ms 6912 KB Output is correct
12 Correct 21 ms 6912 KB Output is correct
13 Correct 22 ms 6912 KB Output is correct
14 Correct 24 ms 6912 KB Output is correct
15 Correct 22 ms 6912 KB Output is correct
16 Correct 18 ms 6912 KB Output is correct
17 Correct 19 ms 6912 KB Output is correct
18 Correct 2574 ms 15732 KB Output is correct
19 Correct 2525 ms 15804 KB Output is correct
20 Correct 2457 ms 15908 KB Output is correct
21 Correct 2505 ms 16084 KB Output is correct
22 Correct 2541 ms 15756 KB Output is correct
23 Correct 2435 ms 16920 KB Output is correct
24 Correct 2522 ms 18708 KB Output is correct
25 Correct 2429 ms 18408 KB Output is correct
26 Correct 99 ms 9844 KB Output is correct
27 Correct 761 ms 14576 KB Output is correct
28 Correct 753 ms 14444 KB Output is correct
29 Correct 1771 ms 17404 KB Output is correct
30 Correct 2442 ms 19564 KB Output is correct
31 Correct 1400 ms 13804 KB Output is correct
32 Correct 528 ms 11248 KB Output is correct
33 Correct 1427 ms 16104 KB Output is correct
34 Correct 1452 ms 16236 KB Output is correct
35 Correct 106 ms 9972 KB Output is correct
36 Correct 1428 ms 16252 KB Output is correct
37 Correct 1357 ms 16412 KB Output is correct
38 Correct 1328 ms 16112 KB Output is correct
39 Correct 1167 ms 14956 KB Output is correct
40 Correct 1182 ms 15212 KB Output is correct
41 Correct 1322 ms 17132 KB Output is correct
42 Correct 1292 ms 17260 KB Output is correct
43 Execution timed out 3097 ms 15596 KB Time limit exceeded
44 Halted 0 ms 0 KB -