제출 #533098

#제출 시각아이디문제언어결과실행 시간메모리
533098DanerZein도로 폐쇄 (APIO21_roads)C++14
0 / 100
2087 ms18784 KiB
#include "roads.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> ii; typedef vector<ii> vi; typedef pair<ii,ll> iii; const int MAX_N=2e5+10; bool vis[MAX_N]; int pa[MAX_N]; vector<vi> G; int n; void init(int n){ for(int i=0;i<n;i++) pa[i]=i; } int findset(int x){ if(pa[x]==x) return x; return pa[x]=findset(pa[x]); } bool issameset(int i,int j){ return findset(i)==findset(j); } void unionset(int i,int j){ if(!issameset(i,j)){ int u=findset(i),v=findset(j); pa[u]=v; } } ll dp[MAX_N]; int path[MAX_N]; ll knap(int u,int p){ if(dp[u]!=-1) return dp[u]; ll ans=0; for(auto &v:G[u]){ if(v.first!=p){ ans+=knap(v.first,u)+v.second; } } ll s=ans; int id=-1; for(auto &v:G[u]){ if(v.first!=p){ ll rp=s; rp=rp-dp[v.first]-v.second; for(auto &z:G[v.first]){ if(z.first!=u){ rp+=dp[z.first]+z.second; } } if(ans>rp){ ans=rp; id=v.first; } } } path[u]=id; return dp[u]=ans; } std::vector<long long> minimum_closure_costs(int N, std::vector<int> U, std::vector<int> V, std::vector<int> W) { n=N; vector<ll> res; vector<iii> ed; G.resize(n+1); ll s=0; for(int i=0;i<n-1;i++){ int a=U[i],b=V[i],w=W[i]; G[a].push_back(ii(b,w)); G[b].push_back(ii(a,w)); ed.push_back(iii(ii(a,b),w)); s+=w; } res.push_back(s); init(n); for(int i=0;i<n-1;i++){ memset(dp,-1,sizeof dp); res.push_back(knap(findset(0),findset(0))); for(int j=0;j<n;j++){ if(path[j]!=-1) unionset(j,path[j]); } G.clear(); G.resize(n+1); for(int j=0;j<ed.size();j++){ int u=findset(ed[j].first.first); int v=findset(ed[j].first.second); ll w=ed[j].second; if(u!=v){ G[u].push_back(ii(v,w)); G[v].push_back(ii(u,w)); } } } return res; }

컴파일 시 표준 에러 (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:84:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<long long int, long long int>, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |     for(int j=0;j<ed.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...
#Verdict Execution timeMemoryGrader output
Fetching results...