제출 #386350

#제출 시각아이디문제언어결과실행 시간메모리
386350Bill_00다리 (APIO19_bridges)C++14
46 / 100
3071 ms10316 KiB
#include <bits/stdc++.h> #define pb push_back #define ff first #define ss second #define ll long long #define N 100005 const int c=316; using namespace std; int u[N],v[N],w[N],type[N],a[N],b[N],y[N]; int id[N],sz[N],p[N],ans[N]; int find(int node){ return (node==p[node]?node:find(p[node])); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); memset(id,-1,sizeof(id)); int n,m; cin >> n >> m; for(int i=1;i<=m;i++){ cin >> u[i] >> v[i] >> w[i]; } int q; cin >> q; for(int i=1;i<=q;i++){ cin >> type[i] >> a[i] >> b[i]; } for(int i=0;i<=(q-1)/c;i++){ for(int j=1;j<=n;j++){ p[j]=j; sz[j]=1; } vector<pair<pair<int,int>,int> >vv; for(int j=i*c+1;j<=min(q,(i+1)*c);j++){ if(type[j]==1){ id[a[j]]=i; } else{ vv.pb({{-b[j],1},j}); } } vector<int>vec; for(int j=1;j<=m;j++){ if(id[j]!=i){ vv.pb({{-w[j],0},j}); } else{ vec.pb(j); } } sort(vv.begin(),vv.end()); for(int j=0;j<vv.size();j++){ if(vv[j].ff.ss==0){ int k=vv[j].ss; int aa=find(u[k]); int bb=find(v[k]); if(aa==bb) continue; if(sz[aa]>sz[bb]){ p[bb]=aa; sz[aa]+=sz[bb]; } else{ p[aa]=bb; sz[bb]+=sz[aa]; } } else{ stack<pair<pair<int,int>,pair<int,int> > >st; int k=vv[j].ss; for(int t:vec) y[t]=-1; for(int t=i*c+1;t<=k;t++){ if(type[t]==1){ y[a[t]]=b[t]; } } for(int t=k;t<=min(q,(i+1)*c);t++){ if(type[t]==1 && y[a[t]]==-1) y[a[t]]=w[a[t]]; } for(int t:vec){ if(y[t]>=b[k]){ int aa=find(u[t]); int bb=find(v[t]); if(aa==bb) continue; st.push({{aa,sz[aa]},{bb,sz[bb]}}); if(sz[aa]>sz[bb]){ p[bb]=aa; sz[aa]+=sz[bb]; } else{ p[aa]=bb; sz[bb]+=sz[aa]; } } } int aa=find(a[k]); ans[k]=sz[aa]; while(!st.empty()){ p[st.top().ff.ff]=st.top().ff.ff; p[st.top().ss.ff]=st.top().ss.ff; sz[st.top().ff.ff]=st.top().ff.ss; sz[st.top().ss.ff]=st.top().ss.ss; st.pop(); } } } for(int j=i*c+1;j<=min(q,(i+1)*c);j++){ if(type[j]==1){ w[a[j]]=b[j]; } } } for(int i=1;i<=q;i++){ if(type[i]==2){ cout << ans[i] << '\n'; } } }

컴파일 시 표준 에러 (stderr) 메시지

bridges.cpp: In function 'int main()':
bridges.cpp:53:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<int, int>, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |   for(int j=0;j<vv.size();j++){
      |               ~^~~~~~~~~~
#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...