Submission #756661

# Submission time Handle Problem Language Result Execution time Memory
756661 2023-06-12T04:03:21 Z khoquennguoiminhthuong Bridges (APIO19_bridges) C++17
100 / 100
2700 ms 5560 KB
#include <bits/stdc++.h>
 
using namespace std;
int n,m,q;
struct canh {
    int u,v,w;
} e[500005];
int dd[200005],ans[200005];
struct disjoint_set_union_rollback {
    vector <int> lab, sz;
    stack <int> save;
    int n;
    disjoint_set_union_rollback(int _n = 0) : n(_n) {
        lab.resize(n + 1, 0);
        sz.resize(n + 1, 1);
        iota(lab.begin(),lab.end(), 0);
    }
 
    void clear() {
        while((int) save.size()) save.pop();
        fill(sz.begin(),sz.end(), 1);
        iota(lab.begin(),lab.end(), 0);
    }
 
    int find(int u) {
        assert(u <= n);
        // cout << u << '\n';
        return lab[u] == u ? u : find(lab[u]);
    }
 
    bool merge(int u, int v) {
        u = find(u), v = find(v);
        if(u == v) return false;
        if(sz[u] < sz[v]) swap(u, v);
        sz[u] += sz[v];
        lab[v] = u;
        save.push(v);
        return true;
    }
    void rollback(int ptr) {
        while((int) save.size() > ptr) {
            int v = save.top(); save.pop();
            sz[lab[v]] -= sz[v];
            lab[v] = v;
        }
    }
};
 
bool cmp(int a,int b) {
    if(e[a].w!=e[b].w)return e[a].w>e[b].w;
    return a<b;
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    for(int i=1; i<=m; i++) {
        cin>>e[i].u>>e[i].v>>e[i].w;
    }
    cin>>q;
    for(int i=1; i<=q; i++)
        cin>>e[i+m].u>>e[i+m].v>>e[i+m].w;
    const int blsize=1000;
    disjoint_set_union_rollback dsu(n+5);
    for(int l=m+1; l<=q+m; l+=blsize) {
        int r=min(l+blsize-1,m+q);
        dsu.clear();
        vector<int>change;
        vector<int>unchange;
        for(int i=l; i<=r; i++) {
            if(e[i].u==1) {
                change.push_back(i);
                dd[e[i].v]=1;
            } else unchange.push_back(i);
        }
        for(int i=1; i<=m; i++)if(dd[i]==0)unchange.push_back(i);
            else dd[i]=0;
        sort(unchange.begin(),unchange.end(),cmp);
        reverse(change.begin(),change.end());
        for(auto v:unchange) {
            if(v<=m) {
                dsu.merge(e[v].u,e[v].v);
            } else {
                int now=(int)dsu.save.size();
                for(auto vv:change) {
                    if(vv<=v&&dd[e[vv].v]==0) {
                        dd[e[vv].v]=1;
                        int id=e[vv].v;
                        if(e[vv].w>=e[v].w)dsu.merge(e[id].u,e[id].v);
                    }
                }
                for(auto vv:change) {
                    if(vv>v&&dd[e[vv].v]==0) {
                        int id=e[vv].v;
                        if(e[id].w>=e[v].w)dsu.merge(e[id].u,e[id].v);
                    }
                }
                ans[v]=dsu.sz[dsu.find(e[v].v)];
                dsu.rollback(now);
                for(auto vv:change)dd[e[vv].v]=0;
            }
        }
     for(int i=l;i<=r;i++)if(e[i].u==1){int id=e[i].v;e[id].w=e[i].w;}
    }
    for(int i=m+1; i<=m+q; i++)if(ans[i])cout<<ans[i]<<'\n';
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 50 ms 508 KB Output is correct
4 Correct 4 ms 468 KB Output is correct
5 Correct 39 ms 468 KB Output is correct
6 Correct 36 ms 492 KB Output is correct
7 Correct 39 ms 468 KB Output is correct
8 Correct 39 ms 484 KB Output is correct
9 Correct 43 ms 484 KB Output is correct
10 Correct 40 ms 480 KB Output is correct
11 Correct 41 ms 484 KB Output is correct
12 Correct 42 ms 468 KB Output is correct
13 Correct 50 ms 488 KB Output is correct
14 Correct 50 ms 468 KB Output is correct
15 Correct 44 ms 484 KB Output is correct
16 Correct 40 ms 492 KB Output is correct
17 Correct 44 ms 496 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1709 ms 3756 KB Output is correct
2 Correct 1685 ms 3672 KB Output is correct
3 Correct 1697 ms 3680 KB Output is correct
4 Correct 1788 ms 3724 KB Output is correct
5 Correct 1770 ms 3792 KB Output is correct
6 Correct 2564 ms 3876 KB Output is correct
7 Correct 2552 ms 3936 KB Output is correct
8 Correct 2656 ms 3944 KB Output is correct
9 Correct 35 ms 2160 KB Output is correct
10 Correct 1726 ms 3988 KB Output is correct
11 Correct 1679 ms 3908 KB Output is correct
12 Correct 1590 ms 4212 KB Output is correct
13 Correct 1648 ms 3800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1417 ms 3280 KB Output is correct
2 Correct 1145 ms 2404 KB Output is correct
3 Correct 1677 ms 3336 KB Output is correct
4 Correct 1319 ms 3220 KB Output is correct
5 Correct 33 ms 2004 KB Output is correct
6 Correct 1477 ms 3396 KB Output is correct
7 Correct 1258 ms 3352 KB Output is correct
8 Correct 1102 ms 3264 KB Output is correct
9 Correct 852 ms 3664 KB Output is correct
10 Correct 777 ms 3524 KB Output is correct
11 Correct 880 ms 3000 KB Output is correct
12 Correct 823 ms 2996 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1815 ms 4924 KB Output is correct
2 Correct 35 ms 1992 KB Output is correct
3 Correct 180 ms 2544 KB Output is correct
4 Correct 185 ms 2556 KB Output is correct
5 Correct 1564 ms 4984 KB Output is correct
6 Correct 1817 ms 4920 KB Output is correct
7 Correct 1530 ms 4936 KB Output is correct
8 Correct 897 ms 3540 KB Output is correct
9 Correct 879 ms 3708 KB Output is correct
10 Correct 885 ms 3800 KB Output is correct
11 Correct 1334 ms 4420 KB Output is correct
12 Correct 1321 ms 4460 KB Output is correct
13 Correct 1327 ms 4704 KB Output is correct
14 Correct 1426 ms 4992 KB Output is correct
15 Correct 1445 ms 5032 KB Output is correct
16 Correct 1777 ms 4904 KB Output is correct
17 Correct 1769 ms 4952 KB Output is correct
18 Correct 1789 ms 4920 KB Output is correct
19 Correct 1804 ms 5116 KB Output is correct
20 Correct 1563 ms 4828 KB Output is correct
21 Correct 1484 ms 4960 KB Output is correct
22 Correct 1692 ms 5044 KB Output is correct
23 Correct 1453 ms 4624 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1709 ms 3756 KB Output is correct
2 Correct 1685 ms 3672 KB Output is correct
3 Correct 1697 ms 3680 KB Output is correct
4 Correct 1788 ms 3724 KB Output is correct
5 Correct 1770 ms 3792 KB Output is correct
6 Correct 2564 ms 3876 KB Output is correct
7 Correct 2552 ms 3936 KB Output is correct
8 Correct 2656 ms 3944 KB Output is correct
9 Correct 35 ms 2160 KB Output is correct
10 Correct 1726 ms 3988 KB Output is correct
11 Correct 1679 ms 3908 KB Output is correct
12 Correct 1590 ms 4212 KB Output is correct
13 Correct 1648 ms 3800 KB Output is correct
14 Correct 1417 ms 3280 KB Output is correct
15 Correct 1145 ms 2404 KB Output is correct
16 Correct 1677 ms 3336 KB Output is correct
17 Correct 1319 ms 3220 KB Output is correct
18 Correct 33 ms 2004 KB Output is correct
19 Correct 1477 ms 3396 KB Output is correct
20 Correct 1258 ms 3352 KB Output is correct
21 Correct 1102 ms 3264 KB Output is correct
22 Correct 852 ms 3664 KB Output is correct
23 Correct 777 ms 3524 KB Output is correct
24 Correct 880 ms 3000 KB Output is correct
25 Correct 823 ms 2996 KB Output is correct
26 Correct 1670 ms 4252 KB Output is correct
27 Correct 2078 ms 4072 KB Output is correct
28 Correct 1737 ms 4020 KB Output is correct
29 Correct 1342 ms 3996 KB Output is correct
30 Correct 1991 ms 4120 KB Output is correct
31 Correct 2001 ms 4068 KB Output is correct
32 Correct 2017 ms 3972 KB Output is correct
33 Correct 1734 ms 4164 KB Output is correct
34 Correct 1726 ms 4000 KB Output is correct
35 Correct 1717 ms 3872 KB Output is correct
36 Correct 1395 ms 3896 KB Output is correct
37 Correct 1385 ms 3832 KB Output is correct
38 Correct 1360 ms 4108 KB Output is correct
39 Correct 1055 ms 4176 KB Output is correct
40 Correct 1115 ms 3968 KB Output is correct
41 Correct 1080 ms 4108 KB Output is correct
42 Correct 1085 ms 3944 KB Output is correct
43 Correct 1073 ms 3856 KB Output is correct
44 Correct 1046 ms 3800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 50 ms 508 KB Output is correct
4 Correct 4 ms 468 KB Output is correct
5 Correct 39 ms 468 KB Output is correct
6 Correct 36 ms 492 KB Output is correct
7 Correct 39 ms 468 KB Output is correct
8 Correct 39 ms 484 KB Output is correct
9 Correct 43 ms 484 KB Output is correct
10 Correct 40 ms 480 KB Output is correct
11 Correct 41 ms 484 KB Output is correct
12 Correct 42 ms 468 KB Output is correct
13 Correct 50 ms 488 KB Output is correct
14 Correct 50 ms 468 KB Output is correct
15 Correct 44 ms 484 KB Output is correct
16 Correct 40 ms 492 KB Output is correct
17 Correct 44 ms 496 KB Output is correct
18 Correct 1709 ms 3756 KB Output is correct
19 Correct 1685 ms 3672 KB Output is correct
20 Correct 1697 ms 3680 KB Output is correct
21 Correct 1788 ms 3724 KB Output is correct
22 Correct 1770 ms 3792 KB Output is correct
23 Correct 2564 ms 3876 KB Output is correct
24 Correct 2552 ms 3936 KB Output is correct
25 Correct 2656 ms 3944 KB Output is correct
26 Correct 35 ms 2160 KB Output is correct
27 Correct 1726 ms 3988 KB Output is correct
28 Correct 1679 ms 3908 KB Output is correct
29 Correct 1590 ms 4212 KB Output is correct
30 Correct 1648 ms 3800 KB Output is correct
31 Correct 1417 ms 3280 KB Output is correct
32 Correct 1145 ms 2404 KB Output is correct
33 Correct 1677 ms 3336 KB Output is correct
34 Correct 1319 ms 3220 KB Output is correct
35 Correct 33 ms 2004 KB Output is correct
36 Correct 1477 ms 3396 KB Output is correct
37 Correct 1258 ms 3352 KB Output is correct
38 Correct 1102 ms 3264 KB Output is correct
39 Correct 852 ms 3664 KB Output is correct
40 Correct 777 ms 3524 KB Output is correct
41 Correct 880 ms 3000 KB Output is correct
42 Correct 823 ms 2996 KB Output is correct
43 Correct 1815 ms 4924 KB Output is correct
44 Correct 35 ms 1992 KB Output is correct
45 Correct 180 ms 2544 KB Output is correct
46 Correct 185 ms 2556 KB Output is correct
47 Correct 1564 ms 4984 KB Output is correct
48 Correct 1817 ms 4920 KB Output is correct
49 Correct 1530 ms 4936 KB Output is correct
50 Correct 897 ms 3540 KB Output is correct
51 Correct 879 ms 3708 KB Output is correct
52 Correct 885 ms 3800 KB Output is correct
53 Correct 1334 ms 4420 KB Output is correct
54 Correct 1321 ms 4460 KB Output is correct
55 Correct 1327 ms 4704 KB Output is correct
56 Correct 1426 ms 4992 KB Output is correct
57 Correct 1445 ms 5032 KB Output is correct
58 Correct 1777 ms 4904 KB Output is correct
59 Correct 1769 ms 4952 KB Output is correct
60 Correct 1789 ms 4920 KB Output is correct
61 Correct 1804 ms 5116 KB Output is correct
62 Correct 1563 ms 4828 KB Output is correct
63 Correct 1484 ms 4960 KB Output is correct
64 Correct 1692 ms 5044 KB Output is correct
65 Correct 1453 ms 4624 KB Output is correct
66 Correct 1670 ms 4252 KB Output is correct
67 Correct 2078 ms 4072 KB Output is correct
68 Correct 1737 ms 4020 KB Output is correct
69 Correct 1342 ms 3996 KB Output is correct
70 Correct 1991 ms 4120 KB Output is correct
71 Correct 2001 ms 4068 KB Output is correct
72 Correct 2017 ms 3972 KB Output is correct
73 Correct 1734 ms 4164 KB Output is correct
74 Correct 1726 ms 4000 KB Output is correct
75 Correct 1717 ms 3872 KB Output is correct
76 Correct 1395 ms 3896 KB Output is correct
77 Correct 1385 ms 3832 KB Output is correct
78 Correct 1360 ms 4108 KB Output is correct
79 Correct 1055 ms 4176 KB Output is correct
80 Correct 1115 ms 3968 KB Output is correct
81 Correct 1080 ms 4108 KB Output is correct
82 Correct 1085 ms 3944 KB Output is correct
83 Correct 1073 ms 3856 KB Output is correct
84 Correct 1046 ms 3800 KB Output is correct
85 Correct 2472 ms 5444 KB Output is correct
86 Correct 248 ms 3260 KB Output is correct
87 Correct 266 ms 3132 KB Output is correct
88 Correct 2222 ms 5492 KB Output is correct
89 Correct 2525 ms 5308 KB Output is correct
90 Correct 2211 ms 5280 KB Output is correct
91 Correct 1847 ms 4168 KB Output is correct
92 Correct 1757 ms 4188 KB Output is correct
93 Correct 2492 ms 4132 KB Output is correct
94 Correct 2063 ms 4976 KB Output is correct
95 Correct 2091 ms 4872 KB Output is correct
96 Correct 2401 ms 4756 KB Output is correct
97 Correct 1734 ms 5544 KB Output is correct
98 Correct 1757 ms 5008 KB Output is correct
99 Correct 2433 ms 5452 KB Output is correct
100 Correct 2581 ms 5388 KB Output is correct
101 Correct 2607 ms 5532 KB Output is correct
102 Correct 2495 ms 5368 KB Output is correct
103 Correct 2690 ms 4952 KB Output is correct
104 Correct 2700 ms 5008 KB Output is correct
105 Correct 1890 ms 4820 KB Output is correct
106 Correct 1523 ms 4592 KB Output is correct
107 Correct 1819 ms 5560 KB Output is correct
108 Correct 2554 ms 4996 KB Output is correct
109 Correct 2319 ms 4972 KB Output is correct