제출 #1177754

#제출 시각아이디문제언어결과실행 시간메모리
1177754sasde다리 (APIO19_bridges)C++17
13 / 100
1038 ms3636 KiB
#include<bits/stdc++.h> #define task "strdel" #define ii pair<int,int> #define iii pair<int,ii> #define iv pair<ii,ii> #define se second #define fi first #define ffi fi.fi #define sfi se.fi #define sse se.se #define fse fi.se #define lt(i, c, d) for(int i = c; i <= d; ++i) #define fl(i, c, d) for(int i = d; i >= c; --i) #define pb push_back #define emb emplace_back #define emf emplace_front #define em emplace using namespace std; const int N=5e4+5,sq=450; struct pt{ int u,v,rku,rkv,ru,rv; }; stack<pt>zz; int r[N],rk[N]; int acs(int u){ return r[u]<0?u:acs(r[u]); } void join(int u,int v,int i){ u=acs(u); v=acs(v); if(u!=v){ if(rk[u]>rk[v])swap(u,v); if(i==1) zz.push({u,v,rk[u],rk[v],r[u],r[v]}); r[u]+=r[v]; r[v]=u; rk[u]+=(rk[u]==rk[v]); } } void rollback(){ while(!zz.empty()){ pt z=zz.top(); zz.pop(); int u=z.u; int v=z.v; rk[u]=z.rku; rk[v]=z.rkv; r[u]=z.ru; r[v]=z.rv; } } int n,m,ans[N]; struct pt1{ int u,v,w; }b[2*N]; struct pt2{ int t,u,w; }c[2*N]; bool k[N]; int k1[N]; void solve(){ cin >> n >> m; // cout <<n; for(int i=1;i<=m;++i)cin >> b[i].u >> b[i].v >> b[i].w; int q; cin >> q; for(int test=1;test<=q;++test) { cin >> c[test].t >> c[test].u >> c[test].w; } for(int st=1;st<=q;st+=sq){ vector<int>jo,nojo,res; // cout <<st<<" "<<test<<'\n'; int test=min(q,st+sq-1); for(int i=st;i<=test;++i){ if(c[i].t==1) { k[c[i].u]=1; } else { // cout <<i<<" "; res.emb(i); } } for(int i=1;i<=m;++i){ if(!k[i]){ nojo.emb(i); } else jo.emb(i); } sort(res.begin(),res.end(),[](const int &x,const int &y)->bool{ return c[x].w >c[y].w; }); sort(nojo.begin(),nojo.end(),[](const int &x,const int &y)->bool{ return b[x].w >b[y].w; }); int j=0; memset(r,-1,sizeof r); memset(rk,0,sizeof rk); for(int x:res){ while(j<nojo.size()&&b[nojo[j]].w>=c[x].w){ join(b[nojo[j]].u,b[nojo[j]].v,0); ++j; } for(int z=st;z<x;++z) { if(c[z].t==1 ){ k1[c[z].u]=z; } } for(int y:jo) { if(k1[y]) { if(c[k1[y]].w>=c[x].w) { join(b[y].u,b[y].v,1); } } else { if(b[y].w>=c[x].w) { join(b[y].u,b[y].v,1); } } } ans[x]=-r[acs(c[x].u)]; rollback(); for(int z=st;z<x;++z) { if(c[z].t==1) { k1[c[z].u]=0; } } } for(int i=st;i<=test;++i) { if(c[i].t==1) { k[c[i].u]=0; b[c[i].u].w=c[i].w; } } } for(int i=1;i<=q;++i){ if(c[i].t==2) cout << ans[i]<<'\n'; } } main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } solve(); }

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

bridges.cpp:155:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  155 | main()
      | ^~~~
bridges.cpp: In function 'int main()':
bridges.cpp:161:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  161 |       freopen(task".inp","r",stdin);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:162:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  162 |       freopen(task".out","w",stdout);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...