제출 #666932

#제출 시각아이디문제언어결과실행 시간메모리
666932irmuun도로 폐쇄 (APIO21_roads)C++17
0 / 100
2064 ms7804 KiB
#include <bits/stdc++.h> #include "roads.h" using namespace std; #define ll long long #define pb push_back struct dsu{ vector<ll>p,sz; dsu(ll n){ p.resize(n+1); iota(p.begin(),p.end(),0); sz.resize(n+1); fill(sz.begin(),sz.end(),1); } ll find(ll x){ if(p[x]==x){ return x; } return p[x]=find(p[x]); } ll size(ll x){ return sz[find(x)]; } bool same(ll x,ll y){ x=find(x); y=find(y); if(x==y){ return true; } else{ return false; } } void merge(ll x,ll y){ x=find(x); y=find(y); if(x!=y){ if(sz[x]<sz[y]){ swap(x,y); } sz[x]+=sz[y]; p[y]=x; } } }; vector<ll>minimum_closure_costs(int n,vector<int>v,vector<int>u,vector<int>w){ ll total=0; vector<tuple<ll,ll,ll>>dist; for(int i=0;i<v.size();i++){ dist.pb({w[i],v[i],u[i]}); total+=w[i]; } sort(dist.begin(),dist.end()); vector<ll>ans; for(int k=0;k<n;k++){ dsu ds(n+5); ll cur=0; for(int i=dist.size()-1;i>=0;i--){ ll x=get<1>(dist[i]),y=get<2>(dist[i]),dis=get<0>(dist[i]); if(ds.same(x,y)==false&&ds.size(x)+ds.size(y)<=k+1){ ds.merge(x,y); cur+=dis; } } ans.pb(total-cur); } return ans; }

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

roads.cpp: In function 'std::vector<long long int> minimum_closure_costs(int, std::vector<int>, std::vector<int>, std::vector<int>)':
roads.cpp:48:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |     for(int i=0;i<v.size();i++){
      |                 ~^~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...