Submission #252718

#TimeUsernameProblemLanguageResultExecution timeMemory
252718kshitij_sodaniBridges (APIO19_bridges)C++14
14 / 100
3076 ms20576 KiB
#include <bits/stdc++.h> using namespace std; typedef long long llo; #define mp make_pair #define pb push_back #define a first #define b second vector<pair<pair<llo,llo>,pair<llo,llo>>> ed; vector<pair<pair<llo,llo>,pair<llo,llo>>> ed2; llo n,m,q; vector<pair<llo,pair<llo,llo>>> qq; const llo ss=10001; vector<llo> kk; vector<llo> mm; llo vis[100001]; llo par[50001]; llo tt[50001]; llo find(llo no){ if(par[no]==no){ return no; } par[no]=find(par[no]); return par[no]; } llo ans[100001]; llo vis2[100001]; vector<llo> adj[50001]; llo val[100001]; llo vis3[100001]; llo cot=0; void dfs(llo no){ vis3[no]=1; cot+=tt[no]; for(auto j:adj[no]){ if(vis3[j]==0){ dfs(j); } } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>m; for(llo i=0;i<m;i++){ llo aa,bb,cc; cin>>aa>>bb>>cc; aa--; bb--; ed2.pb({{cc,i},{aa,bb}}); val[i]=cc; } /*sort(cc.begin(),cc.end()); reverse(cc.begin(),cc.end());*/ cin>>q; for(llo i=0;i<q;i++){ llo t; cin>>t; llo aa,bb; cin>>aa>>bb; aa--; qq.pb({t,{aa,bb}}); } for(llo i=0;i<=(q-1)/ss;i++){ vector<pair<pair<llo,llo>,llo>> cur; for(llo j=ss*i;j<min(ss*(i+1),q);j++){ if(qq[j].a==1){ vis[qq[j].b.a]=1; kk.pb(qq[j].b.a); // cout<<qq[j].b.a<<endl; } else{ cur.pb({{qq[j].b.b,qq[j].b.a},j}); } } ed.clear(); for(llo j=0;j<m;j++){ ed.pb({{val[ed2[j].a.b],ed2[j].a.b},ed2[j].b}); } sort(ed.begin(),ed.end()); reverse(ed.begin(),ed.end()); sort(cur.begin(),cur.end()); reverse(cur.begin(),cur.end()); for(llo j=0;j<n;j++){ par[j]=j; tt[j]=1; } llo ind=0; llo ind2=0; while(ind<cur.size() or ind2<ed.size()){ llo st=1;//1 denotes take cur if(ind==cur.size()){ st=0; } else if(ind2==ed.size()){ } else{ if(ed[ind2].a.a>=cur[ind].a.a){ st=0; } } if(st){ //take cur vector<llo> nn; for(llo j=cur[ind].b;j>=ss*i;j--){ if(qq[j].a==1){ if(vis2[qq[j].b.a]==0){ mm.pb(qq[j].b.a); vis2[qq[j].b.a]=1; if(qq[j].b.b>=cur[ind].a.a){ llo x=find(ed2[qq[j].b.a].b.a); llo y=find(ed2[qq[j].b.a].b.b); adj[x].pb(y); adj[y].pb(x); nn.pb(x); nn.pb(y); } } } } for(llo j=cur[ind].b;j<min(ss*(i+1),q);j++){ if(qq[j].a==1){ if(vis2[qq[j].b.a]==0){ mm.pb(qq[j].b.a); vis2[qq[j].b.a]=1; if(val[qq[j].b.a]>=cur[ind].a.a){ llo x=find(ed2[qq[j].b.a].b.a); llo y=find(ed2[qq[j].b.a].b.b); adj[x].pb(y); adj[y].pb(x); nn.pb(x); nn.pb(y); } } } } llo xx=find(cur[ind].a.b); cot=0; dfs(xx); ans[cur[ind].b]=cot; for(auto j:nn){ vis3[j]=0; adj[j].clear(); } for(auto j:mm){ vis2[j]=0; } nn.clear(); mm.clear(); ind++; } else{ //add edge // cout<<1<<":"<<ed[ind2].a.a<<","<<ed[ind2].a.b<<","<<ed[ind2].b.a<<","<<ed[ind2].b.b<<endl; if(vis[ed[ind2].a.b]){ } else{ llo x=find(ed[ind2].b.a); llo y=find(ed[ind2].b.b); // cout<<ed[ind2].b.b<<":"<<ed[ind2].b.a<<endl; if(x!=y){ par[y]=x; tt[x]+=tt[y]; } } ind2++; } } for(auto j:kk){ vis[j]=0; } kk.clear(); for(llo j=ss*i;j<min(ss*(i+1),q);j++){ if(qq[j].a==1){ val[qq[j].b.a]=qq[j].b.b; } } } for(llo i=0;i<q;i++){ if(qq[i].a==2){ cout<<ans[i]<<endl; } } return 0; }

Compilation message (stderr)

bridges.cpp: In function 'int main()':
bridges.cpp:92:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(ind<cur.size() or ind2<ed.size()){
         ~~~^~~~~~~~~~~
bridges.cpp:92:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(ind<cur.size() or ind2<ed.size()){
                           ~~~~^~~~~~~~~~
bridges.cpp:94:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if(ind==cur.size()){
       ~~~^~~~~~~~~~~~
bridges.cpp:97:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    else if(ind2==ed.size()){
            ~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...