给原点到其他所有点的路径长度,问所有边权之和是多少,边权可以为负。
路径从小到大排序,当前位置右边乘(n-i)当前位置(i)及其左边,减去1,也即是减去那条直接相连的路。得到经过该差值的边数总和。
注意爆int,要加上1ll*。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 5;
ll a[maxn];
int main()
{
int t, n;
scanf("%d", &t);
while (t--)
{
ll ans = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%lld", &a[i]);
sort(a, a + n);
for (int i = 1; i < n; i++)
{
ans = ans + ((1ll * (n - i) * i) - 1) * (a[i - 1] - a[i]);
//cout << "ans=" << ans << endl;
}
printf("%lld\n", ans);
}
return 0;
}