hdu6090 Rikka with Graph 2017多校第五场1006 找规律
来源:互联网 发布:如何抢注域名赚钱 编辑:程序博客网 时间:2024/06/03 18:49
http://acm.split.hdu.edu.cn/showproblem.php?pid=6090
Rikka with Graph
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 25 Accepted Submission(s): 17
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 graphG 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 graphG (wG ) as ∑ni=1∑nj=1dist(i,j) .
Now, Yuta hasn 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 ofwG .
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
Then, we can define the weight of the graph
Now, Yuta has
Yuta wants to know the minimal value of
It is too difficult for Rikka. Can you help her?
In the sample, Yuta can choose
Input
The first line contains a number t(1≤t≤10) , the number of the testcases.
For each testcase, the first line contains two numbersn,m(1≤n≤106,1≤m≤1012) .
For each testcase, the first line contains two numbers
Output
For each testcase, print a single line with a single number -- the answer.
Sample Input
14 5
Sample Output
14
Source
2017 Multi-University Training Contest - Team 5
题意:有n个点,你可以填上m条边。连通的两点间的距离就是最短路上的边数,不连通的话是n。求出填上边后的距离之和的最小值。
题解:多写几组之后发现,最优的填法是:选定一个点,先把该点与其他所有点连满,若有多的边,再选下一个点与其他点连满(这或许是一个结论,但是图论学的不精)。计算的时候我是用全部不连的状态减去每次连边后两点间的距离减少的值,具体看代码理解。
代码:
#include<bits/stdc++.h>#define debug cout<<"aaa"<<endl#define mem(a,b) memset(a,b,sizeof(a))#define LL long long#define lson l,mid,root<<1#define rson mid+1,r,root<<1|1#define MIN_INT (-2147483647-1)#define MAX_INT 2147483647#define MAX_LL 9223372036854775807i64#define MIN_LL (-9223372036854775807i64-1)using namespace std;const int N = 100000 + 5;const int mod = 1000000000 + 7;int main(){int t;LL n,m,ans;scanf("%d",&t);while(t--){scanf("%lld%lld",&n,&m);ans=n*n*(n-1);if(m<=n-1){//减去减少的距离,这个形成的是一颗树:有m个叶子节点,都连在根节点上,其余的都是孤立点距离不变 ans=ans-m*(m-1)*(n-2)-2*m*(n-1);}else if(m>n*(n-1)/2){//全部连上的情况,直接计算结果 ans=n*(n-1);}else{//连上n-1条边后就是一颗树:有n-1个叶子节点,都连在根节点上//在这棵树上再添加边,那么这条边上的两点的距离就从原来的2,变成了1 ans=ans-2*(n-1)*(n-1)-2*(m-n+1)-(n-1)*(n-2)*(n-2);}printf("%lld\n",ans);}return 0;}
阅读全文
0 0
- hdu6090 Rikka with Graph 2017多校第五场1006 找规律
- HDU6090 Rikka with Graph 找规律签到
- hdu6090 Rikka with Graph (找规律)
- HDU6090 Rikka with Graph(贪心,思路,2017 HDU多校联赛 第5场)
- 2017多校训练Contest5: 1006 Rikka with Graph hdu6090
- Hdu6090 Rikka with Graph(2017多校第5场)
- HDU6090 Rikka with Graph
- HDU6090 Rikka with Graph
- HDU6090 Rikka with Graph
- hdu6090 Rikka with Graph
- hdu6090 Rikka with Graph
- HDU6090-Rikka with Graph
- HDU6090---Rikka with Graph(2017多校联赛:思路题)
- -----找规律 hdu 6090-Rikka with Graph
- HDU6090-思维&构造&贪心&&2017多校5-Rikka with Graph
- hdu 6090 Rikka with Graph(找规律)
- 2017杭电多校第五场Rikka with Subset
- 2017多校联合第五场1006/hdu6090Rikka with Graph(思维公式)
- 【hdu 1702】 ACboy needs your help again!
- springboot+mybatis日志显示SQL的最简单方法
- 数组去重(方法)
- RocketMQ存储篇——IndexFile和IndexService
- 单向链表反转
- hdu6090 Rikka with Graph 2017多校第五场1006 找规律
- ES6代码转为ES5代码的在线转换工具
- 二叉树、B树、B+树、B*树和R树小记
- ViewPager的基础使用介绍
- linux 中文文件名乱码
- C语言中文件的读取和写入
- SpriteRenderer.sprite
- 几个常用的Python库
- 如何快速转载CSDN中的博客