Rikka with Graph
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
Problem Description
As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them:
For an undirected graph G with n nodes and m edges, we can define the distance between (i,j) ( \text{dist}(i,j)) as the length of the shortest path between i and j. The length of a path is equal to the number of the edges on it. Specially, if there are no path between i and j, we make \text{dist}(i,j) equal to n.
Then, we can define the weight of the graph G ( w_G) as \sum_{i=1}^n \sum_{j=1}^n \text{dist}(i,j) .
Now, Yuta has n nodes, and he wants to choose no more than m pairs of nodes (i,j)(i \neq j) and then link edges between each pair. In this way, he can get an undirected graph G with n nodes and no more than m edges.
Yuta wants to know the minimal value of w_G .
It is too difficult for Rikka. Can you help her?
In the sample, Yuta can choose (1,2),(1,4),(2,4),(2,3),(3,4) .
For an undirected graph G with n nodes and m edges, we can define the distance between (i,j) ( \text{dist}(i,j)) as the length of the shortest path between i and j. The length of a path is equal to the number of the edges on it. Specially, if there are no path between i and j, we make \text{dist}(i,j) equal to n.
Then, we can define the weight of the graph G ( w_G) as \sum_{i=1}^n \sum_{j=1}^n \text{dist}(i,j) .
Now, Yuta has n nodes, and he wants to choose no more than m pairs of nodes (i,j)(i \neq j) and then link edges between each pair. In this way, he can get an undirected graph G with n nodes and no more than m edges.
Yuta wants to know the minimal value of w_G .
It is too difficult for Rikka. Can you help her?
In the sample, Yuta can choose (1,2),(1,4),(2,4),(2,3),(3,4) .
Input
The first line contains a number
t(1 \leq t \leq 10)
, the number of the testcases.
For each testcase, the first line contains two numbers n,m(1 \leq n \leq 10^6,1 \leq m \leq 10^{12}) .
For each testcase, the first line contains two numbers n,m(1 \leq n \leq 10^6,1 \leq m \leq 10^{12}) .
Output
For each testcase, print a single line with a single number -- the answer.
Sample Input
1 4 5
Sample Output
14
这道题做的时候掉到坑里去了 忘了环状和链状的路径都比放射状的长度长 加上后面一个变量没用long long类型 就这么傻傻的错了十几遍 最近智商下降有点严重(┬_┬)、、
ac代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
long long n,m;
long long ans=0;
scanf("%lld%lld",&n,&m);
if(m>=n)
{
if(n*(n-1)/2<=m)
{ans=n*(n-1);
}
else if(n*(n-1)/2>m)
{ans=n*(n-1)+(n*(n-1)/2-m)*2;
}
}
else if(m==n-1)
{
ans=(n-2)*(n-1)*2+2*(n-1);
}
else if(m<n-1)
{
ans+=(m-1)*m*2+2*m;
long long g=n-(m+1);
ans+=g*(m+1)*n*2;
ans+=g*(g-1)*n;
}
cout<<ans<<endl;
}
return 0;
}