Untitled

 avatar
unknown
plain_text
a year ago
1.3 kB
13
Indexable
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
mt19937 random_seed(time(0));
long long rnd(long long l , long long r){
    if(l > r) throw invalid_argument("parameters is invalid");
    uniform_int_distribution<long long> dist(l, r);
    return dist(random_seed);
}
int main() {
    ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(0);

#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    freopen("error.txt", "w", stderr);
#endif
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        map<pair<int,int> , ll>hash;
        vector<pair<int , int>>edges;
        for(int i = 0;i<n;i++){
            int a, b;cin>>a>>b;
            if(a > b)swap(a , b);
            edges.emplace_back(a , b);
            if(hash.count(make_pair(a , b))) {
                continue;
            }else{
                hash[make_pair(a , b)] = rnd(1 , 1e15);
            }
        }
        map<ll , int>res;
        for(int i = 0;i<n;i++){
            ll sum = 0;
            for(int j = i;j<n;j++){
                sum += hash[make_pair(edges[j].first , edges[j].second)];
                res[sum]++;
            }
        }
        ll ans = 0;
        for(auto &val:res){
            ans += val.second * (val.second - 1) / 2;
        }
        cout<<ans<<'\n';
    }
}
Editor is loading...
Leave a Comment