Submission #974908

# Submission time Handle Problem Language Result Execution time Memory
974908 2024-05-04T06:43:37 Z vivkostov Bridges (APIO19_bridges) C++14
100 / 100
2008 ms 36188 KB
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    /*#ifdef ONLINE_JUDGE
    freopen("taxi.in", "r", stdin);
    freopen("taxi.out", "w", stdout);
    #endif
    */
}
struct cell
{
    int a,b,c,use,ti,old;
};
bool cmp(cell a1,cell a2)
{
    if(a1.c==a2.c)return a1.a>a2.a;
    return a1.c>a2.c;
}
int n,m,q,num[1000005],b[1000005],c[1000005],lead[1000005],sz[1000005],otg[1000005],used[1000005];
cell a[1000005],f[1000005],lis[1000005];
stack<pair<int,int>>s;
int get_lead(int a)
{
    while(lead[a]!=a)a=lead[a];
    return a;
}
void prec()
{
    for(int i=1; i<=n; i++)
    {
        lead[i]=i;
        sz[i]=1;
    }
}
int bg;
void add(int a,int b)
{
    a=get_lead(a);
    b=get_lead(b);
    if(a==b)return;
    bg++;
    if(sz[a]<b[sz])swap(a,b);
    sz[a]+=sz[b];
    lead[b]=a;
    pair<int,int>p;
    p.first=a;
    p.second=b;
    s.push(p);
}
void del()
{
    int a=s.top().first,b=s.top().second;
    sz[a]-=sz[b];
    lead[b]=s.top().second;
    s.pop();
}
void read()
{
    cin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        cin>>a[i].a>>a[i].b>>a[i].c;
        a[i].ti=a[i].c;
    }
    cin>>q;
    for(int i=1; i<=q; i++)
    {
        cin>>num[i]>>b[i]>>c[i];
    }
    for(int i=1; i<=q; i+=1000)
    {
        int br=0,br1=0;
        prec();
        for(int j=i; j<=min(q,i+1000); j++)
        {
            if(num[j]==1)
            {
                int o=a[b[j]].ti;
                a[b[j]].use=1;
                a[b[j]].c=c[j];
                br1++;
                lis[br1]=a[b[j]];
                lis[br1].use=b[j];
                lis[br1].ti=j;
                lis[br1].old=o;
            }
            else
            {
                br++;
                f[br].a=-j;
                f[br].b=b[j];
                f[br].c=c[j];
                f[br].ti=j;
            }
        }
        for(int j=1; j<=m; j++)
        {
            if(!a[j].use)
            {
                br++;
                f[br]=a[j];
            }
        }
        sort(f+1,f+br+1,cmp);
        /*cout<<endl;
        for(int j=1; j<=br1; j++)
        {
            cout<<lis[j].a<<" "<<lis[j].b<<" "<<lis[j].c<<" "<<lis[j].use<<" "<<lis[j].ti<<" "<<lis[j].old<<endl;
        }
        for(int i=1; i<=n; i++)
        {
            cout<<lead[i]<<" "<<sz[i]<<" "<<i<<endl;
        }
        cout<<endl;
        */
        for(int j=1; j<=br; j++)
        {
            if(f[j].a>0)
            {
                add(f[j].a,f[j].b);
                /*for(int i=1; i<=n; i++)
                {
                    cout<<lead[i]<<" "<<sz[i]<<" "<<i<<endl;
                }
                cout<<endl;
                */
            }
            else
            {
                //cout<<f[j].c<<endl;
                //cout<<endl;
                for(int i=1; i<=n; i++)
                {
                    //cout<<lead[i]<<" "<<sz[i]<<" "<<i<<endl;
                }
                //cout<<endl;
                for(int h=1;h<=br1;h++)used[lis[h].use]=-1;
                for(int h=1;h<=br1;h++)
                {
                    if(lis[h].c>=f[j].c&&lis[h].ti<f[j].ti)
                    {
                        used[lis[h].use]=1;
                    }
                    else if(lis[h].ti<f[j].ti)
                    {
                        used[lis[h].use]=0;
                    }
                    if(lis[h].ti>f[j].ti&&lis[h].old>=f[j].c&&used[lis[h].use]==-1)
                    {
                        used[lis[h].use]=1;
                    }
                }
                for(int i=1;i<=q;i++)
                {
                    //cout<<used[i]<<" ";
                }
                //cout<<endl;
                bg=0;
                for(int h=1; h<=br1; h++)
                {
                    if(used[lis[h].use]==1)
                    {
                        add(lis[h].a,lis[h].b);
                    }
                }
                otg[f[j].ti]=sz[get_lead(f[j].b)];
                //cout<<get_lead(f[j].b)<<endl;
                //cout<<-f[j].a<<" "<<otg[-f[j].a]<<" "<<f[j].b<<" "<<bg<<" "<<f[j].c<<" "<<f[j].ti<<endl;
                for(int z=1; z<=bg; z++)del();
            }
        }
        for(int i=1; i<=m; i++)
        {
            a[i].use=0;
            lis[i].a=0;
            lis[i].b=0;
            lis[i].c=0;
            lis[i].use=0;
            lis[i].ti=0;
            lis[i].old=0;
            f[i].a=0;
            f[i].b=0;
            f[i].c=0;
            f[i].use=0;
            f[i].ti=0;
            f[i].old=0;
            used[i]=0;
            a[i].ti=a[i].c;
        }
        while(!s.empty())
        {
            del();
        }
    }
    for(int i=1; i<=q; i++)
    {
        if(num[i]==2)cout<<otg[i]<<endl;
    }
}
int main()
{
    speed();
    read();
    return 0;
}
/*
10 9
1 2 1
2 3 2
3 4 3
4 5 4
5 6 5
6 7 6
7 8 7
8 9 8
9 10 9
5
1 3 3
1 3 2
1 3 4
1 3 5
2 5 3
*/
# Verdict Execution time Memory Grader output
1 Correct 2 ms 18776 KB Output is correct
2 Correct 3 ms 18776 KB Output is correct
3 Correct 25 ms 18780 KB Output is correct
4 Correct 4 ms 14940 KB Output is correct
5 Correct 28 ms 19036 KB Output is correct
6 Correct 24 ms 19092 KB Output is correct
7 Correct 21 ms 19036 KB Output is correct
8 Correct 30 ms 19096 KB Output is correct
9 Correct 24 ms 19032 KB Output is correct
10 Correct 29 ms 19032 KB Output is correct
11 Correct 30 ms 19032 KB Output is correct
12 Correct 35 ms 19036 KB Output is correct
13 Correct 36 ms 19304 KB Output is correct
14 Correct 32 ms 19036 KB Output is correct
15 Correct 35 ms 19084 KB Output is correct
16 Correct 24 ms 19004 KB Output is correct
17 Correct 25 ms 18780 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1045 ms 27888 KB Output is correct
2 Correct 1051 ms 27932 KB Output is correct
3 Correct 1055 ms 27900 KB Output is correct
4 Correct 1082 ms 27908 KB Output is correct
5 Correct 1083 ms 27772 KB Output is correct
6 Correct 1205 ms 27940 KB Output is correct
7 Correct 1211 ms 28020 KB Output is correct
8 Correct 1205 ms 28064 KB Output is correct
9 Correct 30 ms 16872 KB Output is correct
10 Correct 930 ms 28208 KB Output is correct
11 Correct 983 ms 28436 KB Output is correct
12 Correct 925 ms 27944 KB Output is correct
13 Correct 940 ms 27904 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 767 ms 27568 KB Output is correct
2 Correct 420 ms 23252 KB Output is correct
3 Correct 794 ms 27732 KB Output is correct
4 Correct 760 ms 27556 KB Output is correct
5 Correct 29 ms 16876 KB Output is correct
6 Correct 809 ms 27564 KB Output is correct
7 Correct 730 ms 27480 KB Output is correct
8 Correct 692 ms 27560 KB Output is correct
9 Correct 590 ms 27736 KB Output is correct
10 Correct 566 ms 27732 KB Output is correct
11 Correct 614 ms 27560 KB Output is correct
12 Correct 591 ms 27728 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1597 ms 32188 KB Output is correct
2 Correct 29 ms 16980 KB Output is correct
3 Correct 170 ms 27220 KB Output is correct
4 Correct 127 ms 27296 KB Output is correct
5 Correct 1730 ms 32228 KB Output is correct
6 Correct 1738 ms 32392 KB Output is correct
7 Correct 1767 ms 32012 KB Output is correct
8 Correct 780 ms 27912 KB Output is correct
9 Correct 773 ms 28032 KB Output is correct
10 Correct 775 ms 27860 KB Output is correct
11 Correct 1201 ms 29988 KB Output is correct
12 Correct 1187 ms 30188 KB Output is correct
13 Correct 1195 ms 30228 KB Output is correct
14 Correct 1655 ms 32760 KB Output is correct
15 Correct 1854 ms 32396 KB Output is correct
16 Correct 1612 ms 32240 KB Output is correct
17 Correct 1606 ms 32136 KB Output is correct
18 Correct 1744 ms 32120 KB Output is correct
19 Correct 1642 ms 31964 KB Output is correct
20 Correct 1351 ms 30256 KB Output is correct
21 Correct 1379 ms 30412 KB Output is correct
22 Correct 1539 ms 32188 KB Output is correct
23 Correct 1424 ms 30204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1045 ms 27888 KB Output is correct
2 Correct 1051 ms 27932 KB Output is correct
3 Correct 1055 ms 27900 KB Output is correct
4 Correct 1082 ms 27908 KB Output is correct
5 Correct 1083 ms 27772 KB Output is correct
6 Correct 1205 ms 27940 KB Output is correct
7 Correct 1211 ms 28020 KB Output is correct
8 Correct 1205 ms 28064 KB Output is correct
9 Correct 30 ms 16872 KB Output is correct
10 Correct 930 ms 28208 KB Output is correct
11 Correct 983 ms 28436 KB Output is correct
12 Correct 925 ms 27944 KB Output is correct
13 Correct 940 ms 27904 KB Output is correct
14 Correct 767 ms 27568 KB Output is correct
15 Correct 420 ms 23252 KB Output is correct
16 Correct 794 ms 27732 KB Output is correct
17 Correct 760 ms 27556 KB Output is correct
18 Correct 29 ms 16876 KB Output is correct
19 Correct 809 ms 27564 KB Output is correct
20 Correct 730 ms 27480 KB Output is correct
21 Correct 692 ms 27560 KB Output is correct
22 Correct 590 ms 27736 KB Output is correct
23 Correct 566 ms 27732 KB Output is correct
24 Correct 614 ms 27560 KB Output is correct
25 Correct 591 ms 27728 KB Output is correct
26 Correct 1036 ms 27824 KB Output is correct
27 Correct 1223 ms 28032 KB Output is correct
28 Correct 1088 ms 27704 KB Output is correct
29 Correct 943 ms 27976 KB Output is correct
30 Correct 1138 ms 27860 KB Output is correct
31 Correct 1190 ms 28036 KB Output is correct
32 Correct 1194 ms 29500 KB Output is correct
33 Correct 1109 ms 29244 KB Output is correct
34 Correct 1102 ms 29468 KB Output is correct
35 Correct 1098 ms 29376 KB Output is correct
36 Correct 959 ms 29460 KB Output is correct
37 Correct 998 ms 29232 KB Output is correct
38 Correct 955 ms 29444 KB Output is correct
39 Correct 838 ms 29376 KB Output is correct
40 Correct 839 ms 29396 KB Output is correct
41 Correct 835 ms 29564 KB Output is correct
42 Correct 838 ms 29260 KB Output is correct
43 Correct 836 ms 29468 KB Output is correct
44 Correct 842 ms 29284 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 18776 KB Output is correct
2 Correct 3 ms 18776 KB Output is correct
3 Correct 25 ms 18780 KB Output is correct
4 Correct 4 ms 14940 KB Output is correct
5 Correct 28 ms 19036 KB Output is correct
6 Correct 24 ms 19092 KB Output is correct
7 Correct 21 ms 19036 KB Output is correct
8 Correct 30 ms 19096 KB Output is correct
9 Correct 24 ms 19032 KB Output is correct
10 Correct 29 ms 19032 KB Output is correct
11 Correct 30 ms 19032 KB Output is correct
12 Correct 35 ms 19036 KB Output is correct
13 Correct 36 ms 19304 KB Output is correct
14 Correct 32 ms 19036 KB Output is correct
15 Correct 35 ms 19084 KB Output is correct
16 Correct 24 ms 19004 KB Output is correct
17 Correct 25 ms 18780 KB Output is correct
18 Correct 1045 ms 27888 KB Output is correct
19 Correct 1051 ms 27932 KB Output is correct
20 Correct 1055 ms 27900 KB Output is correct
21 Correct 1082 ms 27908 KB Output is correct
22 Correct 1083 ms 27772 KB Output is correct
23 Correct 1205 ms 27940 KB Output is correct
24 Correct 1211 ms 28020 KB Output is correct
25 Correct 1205 ms 28064 KB Output is correct
26 Correct 30 ms 16872 KB Output is correct
27 Correct 930 ms 28208 KB Output is correct
28 Correct 983 ms 28436 KB Output is correct
29 Correct 925 ms 27944 KB Output is correct
30 Correct 940 ms 27904 KB Output is correct
31 Correct 767 ms 27568 KB Output is correct
32 Correct 420 ms 23252 KB Output is correct
33 Correct 794 ms 27732 KB Output is correct
34 Correct 760 ms 27556 KB Output is correct
35 Correct 29 ms 16876 KB Output is correct
36 Correct 809 ms 27564 KB Output is correct
37 Correct 730 ms 27480 KB Output is correct
38 Correct 692 ms 27560 KB Output is correct
39 Correct 590 ms 27736 KB Output is correct
40 Correct 566 ms 27732 KB Output is correct
41 Correct 614 ms 27560 KB Output is correct
42 Correct 591 ms 27728 KB Output is correct
43 Correct 1597 ms 32188 KB Output is correct
44 Correct 29 ms 16980 KB Output is correct
45 Correct 170 ms 27220 KB Output is correct
46 Correct 127 ms 27296 KB Output is correct
47 Correct 1730 ms 32228 KB Output is correct
48 Correct 1738 ms 32392 KB Output is correct
49 Correct 1767 ms 32012 KB Output is correct
50 Correct 780 ms 27912 KB Output is correct
51 Correct 773 ms 28032 KB Output is correct
52 Correct 775 ms 27860 KB Output is correct
53 Correct 1201 ms 29988 KB Output is correct
54 Correct 1187 ms 30188 KB Output is correct
55 Correct 1195 ms 30228 KB Output is correct
56 Correct 1655 ms 32760 KB Output is correct
57 Correct 1854 ms 32396 KB Output is correct
58 Correct 1612 ms 32240 KB Output is correct
59 Correct 1606 ms 32136 KB Output is correct
60 Correct 1744 ms 32120 KB Output is correct
61 Correct 1642 ms 31964 KB Output is correct
62 Correct 1351 ms 30256 KB Output is correct
63 Correct 1379 ms 30412 KB Output is correct
64 Correct 1539 ms 32188 KB Output is correct
65 Correct 1424 ms 30204 KB Output is correct
66 Correct 1036 ms 27824 KB Output is correct
67 Correct 1223 ms 28032 KB Output is correct
68 Correct 1088 ms 27704 KB Output is correct
69 Correct 943 ms 27976 KB Output is correct
70 Correct 1138 ms 27860 KB Output is correct
71 Correct 1190 ms 28036 KB Output is correct
72 Correct 1194 ms 29500 KB Output is correct
73 Correct 1109 ms 29244 KB Output is correct
74 Correct 1102 ms 29468 KB Output is correct
75 Correct 1098 ms 29376 KB Output is correct
76 Correct 959 ms 29460 KB Output is correct
77 Correct 998 ms 29232 KB Output is correct
78 Correct 955 ms 29444 KB Output is correct
79 Correct 838 ms 29376 KB Output is correct
80 Correct 839 ms 29396 KB Output is correct
81 Correct 835 ms 29564 KB Output is correct
82 Correct 838 ms 29260 KB Output is correct
83 Correct 836 ms 29468 KB Output is correct
84 Correct 842 ms 29284 KB Output is correct
85 Correct 2008 ms 35960 KB Output is correct
86 Correct 197 ms 29016 KB Output is correct
87 Correct 142 ms 29072 KB Output is correct
88 Correct 1954 ms 34616 KB Output is correct
89 Correct 1882 ms 36024 KB Output is correct
90 Correct 1947 ms 34272 KB Output is correct
91 Correct 1110 ms 30928 KB Output is correct
92 Correct 1099 ms 30644 KB Output is correct
93 Correct 1296 ms 30640 KB Output is correct
94 Correct 1497 ms 33384 KB Output is correct
95 Correct 1687 ms 33520 KB Output is correct
96 Correct 1500 ms 32988 KB Output is correct
97 Correct 1824 ms 34396 KB Output is correct
98 Correct 1815 ms 34080 KB Output is correct
99 Correct 1912 ms 36036 KB Output is correct
100 Correct 1897 ms 35796 KB Output is correct
101 Correct 1910 ms 35984 KB Output is correct
102 Correct 1899 ms 36188 KB Output is correct
103 Correct 1671 ms 33516 KB Output is correct
104 Correct 1675 ms 33496 KB Output is correct
105 Correct 1482 ms 33340 KB Output is correct
106 Correct 1271 ms 33116 KB Output is correct
107 Correct 1675 ms 33600 KB Output is correct
108 Correct 1932 ms 35684 KB Output is correct
109 Correct 1663 ms 32316 KB Output is correct