Build Roads

题意:

n个点,每个点的值为a[i],求最小生成树
a[i]是通过题目中给出的程序得到(即a[i]如何得到的我们并不需要很了解)

题解:

肯定不能直接跑最小生成树,因为数据太大了
银川也有个类似的题,比赛时我直接打表,发现当n很大时,答案就是n-1,通过我大量枚举,我得到结论,当n>1000时,我们就直接套结论,当小于1000时,就跑遍最小生成树
但是忘了一种情况,导致一直wa,题目给的L和R,表示的是a[i]的范围,如果L == R时(n很大),说明每个点的值都是L,那么gcd求出边长都是L,所以答案就是(n-1)*L
挺可惜,比赛时一直没想到最后这一小点

代码:

//蒟蒻三人行
#include<bits/stdc++.h>
#include<map>
#define random(a,b) ((a)+rand()%((b-a+1)))
typedef long long ll;
using namespace std;
const int maxn=1e7+9;
int n,L,R,a[200001];
int tot=0;
unsigned long long seed;
unsigned long long xorshift64()
{unsigned long long x=seed;x^=x<<13;x^=x>>7;x^=x<<17;return seed=x;
}
int gen(){return xorshift64()%(R-L+1)+L;
}
int gcd(int a,int b)
{if(b)return gcd(b,a%b);return a;
}
int fa[maxn];
struct node{int u,v,w;
}edge[maxn];
bool cmp(node a,node b)
{return a.w<b.w;
}
int find(int x)
{if(fa[x]==-1)return x;else return fa[x]=find(fa[x]);
}
ll kruskal(int n)
{memset(fa,-1,sizeof(fa));sort(edge+1,edge+1+tot,cmp);int cnt=0;ll ans=0;//cout<<tot<<endl;for(int i=1;i<=tot;i++){int u=edge[i].u;int v=edge[i].v;int w=edge[i].w;int fu=find(u);int fv=find(v);if(fu!=fv){ans+=w;fa[fu]=fv;cnt++;}//cout<<n<<" "<<cnt<<endl;if(cnt==n-1){//cout<<cnt<<endl;break;}}//cout<<tot<<endl;return ans;
}
void add(int u,int v,int w)
{edge[++tot].u=u;edge[tot].v=v;edge[tot].w=w;
}
int main()
{//  cout<<gcd(4,6);//srand(time(0));//int t=1000;
//  while(t--)//    n=random(1,100000);//  L=random(1,19999);//   R=random(L,200000);//  seed=(unsigned long long)random(1,10000000000000); scanf("%d%d%d%llu",&n,&L,&R,&seed);// printf("生成数据%d %d %d %llu\n",n,L,R,seed);memset(edge,0,sizeof(node));memset(a,0,sizeof(int));for(int i=1;i<=n;i++){a[i]=gen();//printf("a[%d]=%d\n",i,a[i]);//2464638799566668449} tot=0;if(L==R){cout<<1ll*(n-1)*L<<endl;return 0;} if(n>1000){cout<<(n-1)<<endl;return 0;}for(int i=1;i<=n;i++){//printf("a[%d]=%d\n",i,a[i]);for(int j=i+1;j<=n;j++){int w=gcd(a[i],a[j]);//       printf("i=%d j=%d w=%d\n",i,j,w);//        printf("w=%d\n",w);add(i,j,w);add(j,i,w);}}//cout<<tot<<endl;//  cout<<edge[1].w;int ww=kruskal(n);cout<<ww<<endl;
//      if(ww!=n-1)
//      {//          cout<<"错误"<<endl;
//          //printf("最终%d %d %d %llu\n",n,L,R,seed);
//          //cout<<"答案= "<<ww<<endl;
//
//      }
//      else cout<<"正确"<<endl;//cout<<"答案= "<<ww<<endl;return 0;
}/*
50000 16199 18966 29398
*/

Build Roads相关推荐

  1. 第十一届山东省大学生程序设计竞赛题解(9 / 13)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 VP了一下,体验不是太好,区分度不是很好,简单题太简单,难题看着就不想写-没什么意思 比赛地址: ht ...

  2. atcoder 2643 切比雪夫最小生成树

    There are N towns on a plane. The i-th town is located at the coordinates (xi,yi). There may be more ...

  3. GDUT_22级专题三 F - Built?

    题目描述: There are N towns on a plane. The i-th town is located at the coordinates (xi​,yi​). There may ...

  4. USACO07DEC道路建设Building Roads(prim算法+堆优化与Kruskal+路径压缩对比)

    目录 primprimprim算法 KruskalKruskalKruskal算法 P2872 [USACO07DEC]道路建设Building Roads 4 1 1 1 3 1 2 3 4 3 1 ...

  5. 洛谷——P2872 [USACO07DEC]道路建设Building Roads

    P2872 [USACO07DEC]道路建设Building Roads 题目描述 Farmer John had just acquired several new farms! He wants ...

  6. CodeForces #369 div2 D Directed Roads DFS

    题目链接:D Directed Roads 题意:给出n个点和n条边,n条边一定都是从1~n点出发的有向边.这个图被认为是有环的,现在问你有多少个边的set,满足对这个set里的所有边恰好反转一次(方 ...

  7. hdu1025 Constructing Roads In JGShining#39;s Kingdom(二分+dp)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1025 Problem ...

  8. HDU1102 Constructing Roads 最小生成树

    点击打开链接 Online Judge Online Exercise Online Teaching Online Contests Exercise Author F.A.Q Hand In Ha ...

  9. CF1413F. Roads and Ramen(树的直径,线段树)

    CF1413F. Roads and Ramen Solution 感觉这个套路也见过许多次了?大概这种奇奇怪怪的树上最长路径的题都得往直径靠一靠. 大概有个结论是:存在一个最优路径使得其起始点和直径 ...

最新文章

  1. 净化心灵的诗歌--《当你老了》
  2. Medoo入门:安装和配置-Medoo使用指南
  3. 深度学习框架的评估与比较
  4. 思考…求知(boolean和Boolean的区别)
  5. 2009.11网络工程师考试案例试题学习攻略(1)
  6. lync服务器不响应或无法联系,Lync 用户无法与外部联系人通信 - Skype for Business | Microsoft Docs...
  7. Visual C++——黄维通《 Visual C++面向对象与可视化程序设计》——例题9-3
  8. 轻量级web富文本框——wangEditor使用手册(4)——配置下拉菜单 demo
  9. python多级字典嵌套_使用pythonscsv DictReader创建多级嵌套字典
  10. YOLO,VOC数据集标注格式解析
  11. html 5 video
  12. 宝塔面板nginx跨域配置(跳坑)
  13. DevOps 实践指南
  14. 量子机器学习HHL算法总结图文
  15. antd 表单 校验、取值、重置
  16. JAVA实现简易的酒店管理系统
  17. Spring bean是什么?
  18. EtherCAT设备协议详解一、EtherCAT概述
  19. penn treebank_Penn Manor致力于开源
  20. android开机自动启动app,Android实现开机自动启动Service或app的方法

热门文章

  1. 学会了!如果认错人了,就像这样亲一口!
  2. 一分钟教你用Excel从统计局抓数据!
  3. 程序猿的双十一最佳攻略
  4. 巴比伦算法求平方根c语言,巴比伦算法求平方根
  5. swoole会合并到php吗,thinkphp整合swoole
  6. c++歌手大赛系统_计人即讯|第十届程序设计大赛
  7. 计算机表演赛新疆赛区,【图】第二十六届中国儿童青少年威盛中国芯HTC计算机表演赛“中国电信天翼杯”新疆赛区总决赛圆满结束_乌鲁木齐教育信息网...
  8. get+php+mysql_Apache+PHP+MySql 的安装及配置
  9. java富文本如何转义_富文本编辑器wangEditor中转义字符的问题
  10. android qq红包,Android实现QQ抢红包插件