Advertisement
Guest User

SPOJ HOLI

a guest
Feb 3rd, 2021
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define w(x) int x;cin>>x;while(x--)
  4. #define ll long long
  5. #define vll vector<long long>
  6. #define pb  push_back
  7. #define mkarr(arr,n,type)  type*arr=new type[n]
  8. #define fr(i,a,b) for(ll i=a;i<b;i++)
  9. #define input(type,n) type n;cin>>n
  10. #define inputvec(arr,n,type) vll arr(n); fr(i,0,n){input(ll,a); arr.pb(a);}
  11. #define inputarr(arr,n,type) mkarr(arr,n,type); fr(i,0,n){cin>>arr[i];}
  12. const unsigned int M = 1000000007;
  13. #define mkpr make_pair
  14. #define pp(type1,type2) pair<type1,type2>
  15. # define unmap unordered_map
  16. ll dfs(ll x,vector<vector<pp(ll,ll)> > umap,vector<bool>& isdone){
  17.     ll node=1;
  18.     isdone[x]=true;
  19.     for(auto cc: umap[x]){
  20.         if(isdone[cc.first]){
  21.             continue;
  22.         }
  23.         node+=dfs(cc.first,umap,isdone);
  24.     }    
  25.     return node;
  26. }
  27.  
  28. void solution(){
  29.     input(ll,n);
  30.     vector<vector<pp(ll,ll)> > umap(n+1);
  31.     fr(i,0,n-1){
  32.         input(ll,a);input(ll,b);input(ll,c);
  33.         umap[a].pb(mkpr(b,c));
  34.         umap[b].pb(mkpr(a,c));
  35.     }
  36.     vector<bool> fedge(n+1,false);
  37.     ll ans=0;
  38.     fr(i,1,n+1){
  39.         for(auto ch: umap[i]){
  40.             if(fedge[ch.first]){
  41.                 continue;
  42.             }
  43.             vector<bool> isdone(n+1,false);
  44.             isdone[i]=true;
  45.             ll weight=ch.second;
  46.             ll rnodes=dfs(ch.first,umap,isdone);
  47.             ll lnodes=n-rnodes;
  48.             ans+=2*min(lnodes,rnodes)*weight;
  49.         }
  50.         fedge[i]=true;
  51.     }
  52.     cout<<ans<<"\n";
  53. }
  54.  
  55. int main(){
  56.     ios_base::sync_with_stdio(false);
  57.     cin.tie(NULL);  
  58.     // #ifndef ONLINE_JUDGE
  59.     // freopen("input.txt", "r", stdin);
  60.     // freopen("output.txt", "w", stdout);
  61.     // #endif
  62.    
  63.     w(x){
  64.         solution();
  65.     }
  66.    
  67.     return 0;
  68. }  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement