제출 #1104459

#제출 시각아이디문제언어결과실행 시간메모리
1104459alexddStranded Far From Home (BOI22_island)C++17
100 / 100
642 ms173524 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; int n,m; int a[200005]; vector<int> con[200005]; int root[200005]; set<int> s[200005],s2[200005]; int sum[200005]; void unite(int x, int y) { x = root[x]; y = root[y]; if(x==y) return; if((int)s2[x].size() < (int)s2[y].size()) swap(x,y); sum[x] += sum[y]; for(auto it:s[y]) { s[x].insert(it); } for(auto it:s2[y]) { s2[x].insert(it); root[it] = x; } //cout<<x<<" "<<sum[x]<<" new sum\n"; } int get_mic(int x, int lim) { if(s[x].upper_bound(lim)==s[x].end()) return INF; return *s[x].upper_bound(lim); } int poz[200005]; bool rez[200005]; int from[200005]; signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>m; vector<pair<int,int>> ord; for(int i=1;i<=n;i++) { cin>>a[i]; ord.push_back({a[i],i}); } int u,v; for(int i=1;i<=m;i++) { cin>>u>>v; con[u].push_back(v); con[v].push_back(u); } sort(ord.begin(), ord.end()); for(int i=0;i<ord.size();i++) poz[ord[i].second] = i; for(int i=1;i<=n;i++) { sum[i] = a[i]; root[i] = i; s2[i].insert(i); for(int adj:con[i]) { if(poz[adj] > poz[i]) s[i].insert(poz[adj]); } } for(auto [_,i]:ord) { //cout<<i<<" ord\n"; if(poz[i]==n-1) { rez[i]=1; continue; } for(int adj:con[i]) { if(poz[adj] < poz[i]) { unite(adj,i); //cout<<i<<" "<<adj<<" uneste\n"; } } int y = ord[get_mic(root[i],poz[i])].second; if(sum[root[i]] >= a[y]) { from[i] = y; } else { from[i] = -1; //cout<<i<<" "<<sum[root[i]]<<" sum\n"; } } for(int j=n-2;j>=0;j--) { int i = ord[j].second; if(from[i]==-1) rez[i] = 0; else rez[i] = rez[from[i]]; } for(int i=1;i<=n;i++) cout<<rez[i]; return 0; }

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

island.cpp: In function 'int main()':
island.cpp:59:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for(int i=0;i<ord.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...