Submission #1263460

#TimeUsernameProblemLanguageResultExecution timeMemory
1263460minhpkReconstruction Project (JOI22_reconstruction)C++20
100 / 100
1116 ms20776 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
struct node{
      int x,y,val;
};
node z[1000005];
bool cmp(node a,node b){
     return a.val<b.val;
}
bool cmp1(node a,node b){
     return a.x<b.x;
}
vector <node> event;
int cnt[1000005];
int inf=1e16;
set<pair<int,int>> v[1005];
void dfs(int i,int par){
     for (auto [p,w]:v[i]){
          if (p==par){
              continue;
          }
          cnt[p]=min(cnt[i],w);
          dfs(p,i);
     }
}

void add(int x,int y,int val){
    v[x].insert({y,val});
    v[y].insert({x,val});
}
void del(int x,int y,int val){
    auto it=v[x].find({y,val});
    v[x].erase(it);

    auto it1=v[y].find({x,val});
    v[y].erase(it1);
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> a >> b;
    for (int i=1;i<=b;i++){
         cin >> z[i].x >> z[i].y >> z[i].val;
    }
    sort(z+1,z+1+b,cmp);
    for (int i=1;i<=b;i++){

         auto [x,y,w]=z[i];
         for (int j=1;j<=a;j++){
              cnt[j]=inf;
         }
//         cerr << x << " " << y << " " << w << " ";
         dfs(x,x);
//         cerr << "ok" << "\n";
         if (cnt[y]!=inf){
             int pos=cnt[y];
             auto [u,v,c]=z[pos];
             int mid=(c+w+1)/2;
             event.push_back({mid,c+w,-2});
             del(u,v,pos);
         }else{
             event.push_back({0,w,-1});
         }
         event.push_back({w,-2*w,2});
         add(x,y,i);
    }
    sort(event.begin(),event.end(),cmp1);
    int cur=0;
    int num1=0,num2=0;
    int q;
    cin >> q;
    while (q--){
         int x;
         cin >> x;
         while (cur<event.size() && event[cur].x<=x){
               num1+=event[cur].y;
               num2+=event[cur].val;
               cur++;
         }
         cout << num2*x +num1 << "\n";
    }
    return 0;
}
#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...