Submission #231692

# Submission time Handle Problem Language Result Execution time Memory
231692 2020-05-14T13:01:46 Z rrrr10000 Bridges (APIO19_bridges) C++17
30 / 100
3000 ms 24308 KB
#pragma GCC target("avx")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n)  for(long long i=0;i<(long long)(n);i++)
#define REP(i,k,n) for(long long i=k;i<(long long)(n);i++)
#define all(a) a.begin(),a.end()
#define pb emplace_back
#define eb emplace_back
#define lb(v,k) (lower_bound(all(v),k)-v.begin())
#define ub(v,k) (upper_bound(all(v),k)-v.begin())
#define fi first
#define se second
#define pi M_PI
#define PQ(T) priority_queue<T>
#define SPQ(T) priority_queue<T,vector<T>,greater<T>>
#define dame(a) {out(a);return 0;}
#define decimal cout<<fixed<<setprecision(15);
#define dupli(a) a.erase(unique(all(a)),a.end())
typedef long long ll;
typedef pair<ll,ll> P;
typedef tuple<ll,ll,ll> PP;
typedef tuple<ll,ll,ll,ll> PPP;
typedef multiset<ll> S;
using vi=vector<ll>;
using vvi=vector<vi>;
using vvvi=vector<vvi>;
using vvvvi=vector<vvvi>;
using vp=vector<P>;
using vvp=vector<vp>;
using vb=vector<bool>;
using vvb=vector<vb>;
const ll inf=1001001001001001001;
const ll INF=1001001001;
const ll mod=1000000007;
const double eps=1e-10;
template<class T> bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;}
template<class T> bool chmax(T&a,T b){if(a<b){a=b;return true;}return false;}
template<class T> void out(T a){cout<<a<<'\n';}
template<class T> void outp(T a){cout<<'('<<a.fi<<','<<a.se<<')'<<'\n';}
template<class T> void outvp(T v){rep(i,v.size())cout<<'('<<v[i].fi<<','<<v[i].se<<')';cout<<'\n';}
template<class T> void outvvp(T v){rep(i,v.size())outvp(v[i]);}
template<class T> void outv(T v){rep(i,v.size()){if(i)cout<<' ';cout<<v[i];}cout<<'\n';}
template<class T> void outvv(T v){rep(i,v.size())outv(v[i]);}
template<class T> bool isin(T x,T l,T r){return (l)<=(x)&&(x)<=(r);}
template<class T> void yesno(T b){if(b)out("yes");else out("no");}
template<class T> void YesNo(T b){if(b)out("Yes");else out("No");}
template<class T> void YESNO(T b){if(b)out("YES");else out("NO");}
template<class T> void noyes(T b){if(b)out("no");else out("yes");}
template<class T> void NoYes(T b){if(b)out("No");else out("Yes");}
template<class T> void NOYES(T b){if(b)out("NO");else out("YES");}
void outs(ll a,ll b){if(a>=inf-100)out(b);else out(a);}
ll gcd(ll a,ll b){if(b==0)return a;return gcd(b,a%b);}
ll modpow(ll a,ll b){a%=mod;if(b==0)return 1;if(b&1)return a*modpow(a,b-1)%mod;ll k=modpow(a,b/2);return k*k%mod;}
vi dx={0,0,1,-1},dy={1,-1,0,0};
vector<PP> change;
vi parent,rankk,sz;
void init(ll n){
    parent=vi(n);
    rankk=vi(n);
    sz=vi(n,1);
    rep(i,n)parent[i]=i;
}
ll root(ll i){if(parent[i]==i)return i;return root(parent[i]);}
ll getsize(ll i){return sz[root(i)];}
bool same(ll a,ll b){return root(a)==root(b);}
bool heigou(ll x,ll y){
    x=root(x);y=root(y);
    if(x==y)return false;
    if(rankk[x]<rankk[y]){parent[x]=y;sz[y]+=sz[x];}
    else{parent[y]=x;sz[x]+=sz[y];}
    if(rankk[x]==rankk[y])rankk[x]++;
    return true;
}
bool heigou2(ll x,ll y){
    x=root(x);y=root(y);
    if(x==y)return false;
    if(rankk[x]<rankk[y]){
        change.pb(0,x,parent[x]);
        change.pb(2,y,sz[y]);
        parent[x]=y;sz[y]+=sz[x];
    }
    else{
        change.pb(0,y,parent[y]);
        change.pb(2,x,sz[x]);
        parent[y]=x;sz[x]+=sz[y];
    }
    if(rankk[x]==rankk[y]){
        change.pb(1,x,rankk[x]);
        rankk[x]++;
    }
    return true;
}
void maku(){
    while(change.size()){
        ll id,a,b;
        tie(id,a,b)=change.back();
        change.pop_back();
        if(id==0)parent[a]=b;
        if(id==1)rankk[a]=b;
        if(id==2)sz[a]=b;
    }
}
void solve(){
    ll n,m,q;cin>>n>>m;
    vp ans;
    vp hen(m);
    vvp upd(m,vp(1));
    set<P> con;
    vi num(m);
    rep(i,m){
        cin>>hen[i].fi>>hen[i].se>>upd[i][0].se;
        hen[i].fi--;hen[i].se--;
        upd[i][0].fi=-1;
        upd[i][0].se*=-1;
        con.insert(P(upd[i][0].se,i));
        num[i]=upd[i][0].se;
    }
    cin>>q;
    ll block=600;
    vector<vector<PP>> group(q);
    ll cnt=-1;
    rep(i,q){
        ll t,a,b;cin>>t>>a>>b;b*=-1;
        t--;a--;
        if(i%block==0)cnt++;
        group[cnt].eb(t,a,b);
        if(!t)upd[a].eb(i,b);
    }
    cnt++;
    rep(i,cnt){
        init(n);
        vp s;
        rep(j,group[i].size()){
            if(get<0>(group[i][j]))s.eb(get<2>(group[i][j]),j);
            else{
                ll k=get<1>(group[i][j]);
                if(num[k]!=inf){
                    con.erase(P(num[k],k));
                    num[k]=inf;
                }
            }
        }
        auto itr=con.begin();
        int w=0;
        sort(all(s));
        while(itr!=con.end()){
            auto x=*itr;
            while(w<s.size()){
                if(x.fi<=s[w].fi)break;
                ll id=s[w].se,ma=s[w].fi;
                rep(j,group[i].size()){
                    if(get<0>(group[i][j]))continue;
                    ll it=lb(upd[get<1>(group[i][j])],P(i*block+id,-inf));
                    if(it&&upd[get<1>(group[i][j])][it-1].se<=ma)heigou2(hen[get<1>(group[i][j])].fi,hen[get<1>(group[i][j])].se);
                }
                ans.pb(i*block+id,getsize(get<1>(group[i][id])));
                maku();
                w++;
            }
            if(w==s.size())break;
            heigou(hen[x.se].fi,hen[x.se].se);
            itr++;
        }
        while(w<s.size()){
            ll id=s[w].se,ma=s[w].fi;
            rep(j,group[i].size()){
                if(get<0>(group[i][j]))continue;
                ll it=lb(upd[get<1>(group[i][j])],P(i*block+id,-inf));
                if(it&&upd[get<1>(group[i][j])][it-1].se<=ma)heigou2(hen[get<1>(group[i][j])].fi,hen[get<1>(group[i][j])].se);
            }
            ans.pb(i*block+id,getsize(get<1>(group[i][id])));
            maku();
            w++;
        }
        for(int j=group[i].size()-1;j>=0;j--){
            if(!get<0>(group[i][j])){
                ll k=get<1>(group[i][j]);
                if(num[k]==inf){
                    num[k]=get<2>(group[i][j]);
                    con.insert(P(num[k],k));
                }
            }
        }
    }
    sort(all(ans));
    for(auto x:ans)out(x.se);
}
signed main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    solve();
}

Compilation message

bridges.cpp: In function 'void solve()':
bridges.cpp:150:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             while(w<s.size()){
                   ~^~~~~~~~~
bridges.cpp:162:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(w==s.size())break;
                ~^~~~~~~~~~
bridges.cpp:166:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         while(w<s.size()){
               ~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 59 ms 1528 KB Output is correct
4 Correct 17 ms 1408 KB Output is correct
5 Correct 84 ms 1400 KB Output is correct
6 Correct 77 ms 1576 KB Output is correct
7 Correct 82 ms 1272 KB Output is correct
8 Correct 102 ms 1400 KB Output is correct
9 Correct 85 ms 1248 KB Output is correct
10 Correct 94 ms 1400 KB Output is correct
11 Correct 90 ms 1404 KB Output is correct
12 Correct 99 ms 1400 KB Output is correct
13 Correct 93 ms 1400 KB Output is correct
14 Correct 94 ms 1400 KB Output is correct
15 Correct 93 ms 1400 KB Output is correct
16 Correct 85 ms 1272 KB Output is correct
17 Correct 86 ms 1276 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2456 ms 17484 KB Output is correct
2 Execution timed out 3074 ms 17128 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1661 ms 14232 KB Output is correct
2 Correct 1132 ms 9920 KB Output is correct
3 Correct 1687 ms 14364 KB Output is correct
4 Correct 1648 ms 14044 KB Output is correct
5 Correct 127 ms 8168 KB Output is correct
6 Correct 1664 ms 14068 KB Output is correct
7 Correct 1651 ms 14140 KB Output is correct
8 Correct 1387 ms 14028 KB Output is correct
9 Correct 1063 ms 14076 KB Output is correct
10 Correct 1010 ms 14204 KB Output is correct
11 Correct 1296 ms 14740 KB Output is correct
12 Correct 1062 ms 14376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 3073 ms 24308 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2456 ms 17484 KB Output is correct
2 Execution timed out 3074 ms 17128 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 59 ms 1528 KB Output is correct
4 Correct 17 ms 1408 KB Output is correct
5 Correct 84 ms 1400 KB Output is correct
6 Correct 77 ms 1576 KB Output is correct
7 Correct 82 ms 1272 KB Output is correct
8 Correct 102 ms 1400 KB Output is correct
9 Correct 85 ms 1248 KB Output is correct
10 Correct 94 ms 1400 KB Output is correct
11 Correct 90 ms 1404 KB Output is correct
12 Correct 99 ms 1400 KB Output is correct
13 Correct 93 ms 1400 KB Output is correct
14 Correct 94 ms 1400 KB Output is correct
15 Correct 93 ms 1400 KB Output is correct
16 Correct 85 ms 1272 KB Output is correct
17 Correct 86 ms 1276 KB Output is correct
18 Correct 2456 ms 17484 KB Output is correct
19 Execution timed out 3074 ms 17128 KB Time limit exceeded
20 Halted 0 ms 0 KB -