HDU 6090 Rikka with Graph (图论规律题)
2017-10-08 16:59
211 查看
Rikka with Graph
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1009 Accepted Submission(s): 583
[align=left]Problem Description[/align]
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).
[align=left]Input[/align]
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).
[align=left]Output[/align]
For each testcase, print a single line with a single number -- the answer.
[align=left]Sample Input[/align]
1
4 5
[align=left]Sample Output[/align]
14
[align=left]Source[/align]
2017 Multi-University Training Contest - Team 5
【分析】:
听说这叫菊花图。。。
题意:存在一个无向图,n个点,你可以任意的加上m条边,权值为1。然后其余的不存在的边权值为n。
问所有的i点到j点的最短路之和。
推规律,设完全图的边数目为 all = n*(n-1)/2 ,分三种情况:
1、m>all ,直接输出all*2(完全图)
2、m<n-1,无法构成一棵树,这种有点点麻烦。
任意选一点,开始绕着方边,能放多少就放多少。
然后,
长度为1的路有m条
长度为2的路有m个点形成完全图个
剩下的边都是长度为n的
累加起来即可。
3、其他,这种情况下,怎么安排边?
就绕着一个点方边,这个点放完了,换个点接着绕。
这样建图就会形成这样的局势:
有m个权值为1的边,剩下的任意i->j的最短路为2。
【代码】:#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll T,m,n;
int main()
{
cin>>T;
while(T--)
{
cin>>n>>m;
ll all=n*(n-1)/2;
if(m>=all)
printf("%lld\n",all*2);
else if(m<n-1)//有孤点
printf("%lld\n",2*m+2*m*(m-1)+2*n*( (m+1)*(n-m-1)+(n-m-1)*(n-m-2)/2) );
else //联通的无向图(包括树)
printf("%lld\n",2*m+4*(all-m));
}
return 0;
}
相关文章推荐
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- -----找规律 hdu 6090-Rikka with Graph
- HDU 6090 Rikka with Graph(规律)
- HDU 6090 Rikka with Graph【规律】
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu5422 Rikka with Graph(图论简单规律题)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(找规律)
- hdu 6090 Rikka with Graph(公式)