hdu 6090 Rikka with Graph

Rikka with Graph

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 425    Accepted Submission(s): 270

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) (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 dist(i,j) equal to n.

Then, we can define the weight of the graph G (wG) as ∑ni=1∑nj=1dist(i,j).

Now, Yuta has n nodes, and he wants to choose no more than m pairs of nodes (i,j)(i≠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 wG.

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≤t≤10), the number of the testcases.

For each testcase, the first line contains two numbers n,m(1≤n≤106,1≤m≤1012).

Output

For each testcase, print a single line with a single number -- the answer.

Sample Input

1

4 5

Sample Output

14

Source

2017 Multi-University Training Contest - Team 5

Recommend

liuyiding   |   We have carefully selected several similar problems for you:  6095 6094 6093 6092 6091

题目大意:

给定n个点,m条边,让你安排点和边构成一个无向图。dis(i,j),表示i到j最小的边数,如果无法到达,dis(i,j)为n,问每个点到其他所有的点的dis之和。

题解:

模拟几组数据:

n=4,m=6,----->res=12

n=4,m=5,----->res=14

n=4,m=4,----->res=16

n=4,m=3,----->res=18

,//到此为止是不是可以找到规律,当 n-1 <= m <= (n-1)*n/2 时,res= n*(n-1)+(n*(n-1)/2-m)*2,当 m > (n-1)**n/2 时,答案还是 n*(n-1)

n=4,m=2,----->res=32

n=4,m=1,----->res=42

//  当 m < n-1,即所有点不能连成一块,则分成两部分来算,一部分是连在一起的(m+1)个点,还有一部分是 ( n- (m+1) )个点

一.  连在一起的点可以套用前面的公式算出是 2*m*m

二.  没有连在一起,答案计算又可以分成两部分,一部分是和那些连在一起的点的长度,(n-m-1)*( m+1 )* n * 2,一部分是孤立的点相互连,(n-m-1)*(n-m-2)*n

 这部分总结的答案是(n-m-1)* ( m+1 ) * n * 2+( n-m-1 ) * ( n-m-2 ) * n

最后答案是(n-m-1)* ( m+1 ) * n * 2  +  ( n-m-1 ) * ( n-m-2 ) * n + 2 * m * m

官方题解:

1006 Rikka with Graph

考虑贪心地一条一条边添加进去。

当 m≤n?1 时,我们需要最小化距离为 n的点对数,所以肯定是连出一个大小为 m+1 的联通块,剩下的点都是孤立点。在这个联通块中,为了最小化内部的距离和,肯定是连成一个菊花的形状,即一个点和剩下所有点直接相邻。

当 m > n-1 时,肯定先用最开始 n-1 条边连成一个菊花,这时任意两点之间距离的最大值是 2。因此剩下的每一条边唯一的作用就是将一对点的距离缩减为 1。

这样我们就能知道了最终图的形状了,稍加计算就能得到答案。要注意 m 有可能大于   n(n-1)/2??。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;

int T;
long long n,m;

int main()
{
    scanf("%d",&T);
    for(;T>0;T--)
    {
        scanf("%lld%lld",&n,&m);
        if (m>=n-1)
        {
            if (m<=n*(n-1)/2) printf("%lld\n",n*(n-1)+(n*(n-1)/2-m)*2);
              else printf("%lld\n",n*(n-1));
        }
          else
          {
              printf("%lld\n",2*m*m+(n-m-1)*(m+1)*2*n+(n-m-1)*(n-m-2)*n);
          }
    }
    return 0;
}
时间: 2024-10-05 11:57:15

hdu 6090 Rikka with Graph的相关文章

HDU 6090 Rikka with Graph —— 2017 Multi-University Training 5

Rikka with Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) 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

HDU 5422:Rikka with Graph

Rikka with Graph Accepts: 353 Submissions: 1174 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的: 勇太有一张nn个点mm条边的无向图,每一条边的长度都是1.现在他想再在这张图上连上一条连接两个不同顶点边,使得1号点到nn号点的最短路尽可能的短

hdu 5424 Rikka with Graph II 哈密顿通路

Rikka with Graph II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 367    Accepted Submission(s): 90 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situatio

HDU 5424——Rikka with Graph II——————【哈密顿路径】

Rikka with Graph II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1051    Accepted Submission(s): 266 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situati

hdu 5422 Rikka with Graph(简单题)

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: Yuta has a non-direct graph with n vertices and m edges. The length of each edge is 1.

hdu 5424 Rikka with Graph II (BestCoder Round #53 (div.2))(哈密顿通路判断)

http://acm.hdu.edu.cn/showproblem.php?pid=5424 哈密顿通路:联通的图,访问每个顶点的路径且只访问一次 n个点n条边 n个顶点有n - 1条边,最后一条边的连接情况: (1)自环(这里不需要考虑): (2)最后一条边将首和尾连接,这样每个点的度都为2: (3)最后一条边将首和除尾之外的点连接或将尾和出尾之外的点连接,这样相应的首或尾的度最小,度为1: (4)最后一条边将首和尾除外的两个点连接,这样就有两个点的度最小,度都为1 如果所给的图是联通的话,那

HDU 5631 Rikka with Graph

如果原图不连通,直接输出0. 如果原图连通,删除X条边之后要保证新图连通,再看数据是n+1条边-->因此,最多只能删去两条边. 因为n=100,可以枚举进行验证,枚举删去每一条边是否连通,枚举删去每两条边是否连通,验证是否连通可以用并查集,可以BFS. #include<cstdio> #include<cstring> #include<cmath> #include<string> #include<vector> #include&l

hdu 5631 Rikka with Graph(图)

n个点最少要n-1条边才能连通,可以删除一条边,最多删除2条边,然后枚举删除的1条边或2条边,用并查集判断是否连通,时间复杂度为O(n^3) 这边犯了个错误, for(int i=0;i<N;i++){ fa[i]=i; } 这个将i<=N,导致错误,值得注意 AC代码: 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cst

HDU 5831 Rikka with Parenthesis II(六花与括号II)

HDU 5831 Rikka with Parenthesis II (六花与括号II) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Description 题目描述 As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math ta