Submission #554284

#TimeUsernameProblemLanguageResultExecution timeMemory
554284ArvinReconstruction Project (JOI22_reconstruction)C++11
0 / 100
1 ms324 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int maxN = 505; struct DSU { int parent[maxN], sz[maxN]; void reset(){ for(int x=0;x<maxN;x++){ parent[x] = x; sz[x] = 1; } } int getParent(int x){ if(parent[x] == x) return x; return parent[x] = getParent(parent[x]); } bool merge(int x, int y){ int a = getParent(x); int b = getParent(y); if(a != b){ if(sz[a] < sz[b]) swap(a, b); parent[b] = a; sz[a] += sz[b]; return true; } return false; } }; DSU dsu; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; vector<array<int, 3>> edge; for(int x=0;x<m;x++){ int a, b, w; cin >> a >> b >> w; a--; b--; edge.push_back({w, a, b}); } sort(edge.begin(), edge.end()); int q; cin >> q; int pos = 0; while(q--){ int val; cin >> val; while(pos+1 < edge.size() && edge[pos+1][0] <= val){ pos++; } dsu.reset(); int l = pos, r = pos+1; ll ans = 0; int cnt = n; while(cnt > 1){ if(l >= 0 && r < edge.size()){ if(val-edge[l][0] <= edge[r][0]-val){ if(dsu.merge(edge[l][1], edge[l][2])){ cnt--; ans += val-edge[l][0]; } l--; } else { if(dsu.merge(edge[r][1], edge[r][2])){ cnt--; ans += edge[r][0]-val; } r++; } } else if(l >= 0){ if(dsu.merge(edge[l][1], edge[l][2])){ cnt--; ans += val-edge[l][0]; } l--; } else if(r < edge.size()){ if(dsu.merge(edge[r][1], edge[r][2])){ cnt--; ans += edge[r][0]-val; } r++; } } cout << ans << "\n"; } return 0; }

Compilation message (stderr)

reconstruction.cpp: In function 'int main()':
reconstruction.cpp:68:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |   while(pos+1 < edge.size() && edge[pos+1][0] <= val){
      |         ~~~~~~^~~~~~~~~~~~~
reconstruction.cpp:78:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |    if(l >= 0 && r < edge.size()){
      |                 ~~^~~~~~~~~~~~~
reconstruction.cpp:98:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 3> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |    } else if(r < edge.size()){
      |              ~~^~~~~~~~~~~~~
#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...