Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define endl "\n"
- long long Weight[200013];
- multiset <long long> Order;
- long long n,q,we,from,to;
- long long Father[200013];
- int findF(int node){
- if (node==Father[node]) return node;
- return Father[node]=findF(Father[node]);
- }
- void Forest_merge(int a,int b){
- int f1 = findF(a);
- int f2 = findF(b);
- if (f1==f2) return;
- Father[a] = Father[b];
- Order.erase(Order.find(Weight[f1]));
- Order.erase(Order.find(Weight[f2]));
- Weight[f2] += Weight[f1];
- Order.insert(Weight[f2]);
- }
- int main(void){
- cin>>n>>q;
- for (int i=1;i<=n;++i){
- cin>>Weight[i];
- Order.insert(Weight[i]);
- Father[i]=i;
- }
- while(q--){
- cin>>from>>to;
- Forest_merge(from,to);
- multiset<long long>::iterator it = Order.begin();
- cout<<*it<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement