BZOJ2753 滑雪与时间胶囊 (洛谷P2573)
来源:互联网 发布:俄罗斯军粮淘宝 编辑:程序博客网 时间:2024/05/01 10:48
最小生成树
BZOJ题目传送门
洛谷传送门
因为可以无限制地使用时间胶囊,所以第一问直接BFS跑跑就行啦
第二问的话对边按高度为第一关键字,权值为第二关键字排个序,然后Kruskal乱搞一下就行啦
注意:
对边排序时应该按目标节点的高度排序。因为建边时就已经保证初始节点的高度大于等于目标节点,这样排的话就可以保证初始节点已经被做过,不会让程序乱跑。反正50秒时间很充裕。(洛谷的时限1s简直有毒)(貌似现在改5秒了,于是我就A了)。
贴上代码:
#include<cstdio>#include<cstring>#include<algorithm>#define MAXN 100000#define MAXM 1000000using namespace std;struct edge{ int now; int next; int to; int dis;};int k,n,m,u,v,d,num;long long ans=0;edge a[2*MAXM+5];int b[MAXN+5],que[MAXN+5],father[MAXN+5],h[MAXN+5];bool f[MAXN+5];void bfs(){ int r=0,w=1; que[1]=1; f[1]=true; num=1; while (r<w){ int x=que[++r]; for (int i=h[x];i;i=a[i].next){ if (!f[a[i].to]){ que[++w]=a[i].to; num++; f[a[i].to]=true; } } }}void read(int x,int y,int z){ k++; a[k].now=x; a[k].next=h[x]; a[k].to=y; a[k].dis=z; h[x]=k;}bool comp(edge x,edge y){ if ((b[x.to]>b[y.to])||(b[x.to]==b[y.to]&&x.dis<y.dis)) return true; return false;}int findfather(int x){ if (x==father[x]) return x; else{ father[x]=findfather(father[x]); return father[x]; }}int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++){ scanf("%d",&b[i]); father[i]=i; } for (int i=1;i<=m;i++){ scanf("%d%d%d",&u,&v,&d); if (b[u]>=b[v]) read(u,v,d); if (b[v]>=b[u]) read(v,u,d); } bfs(); printf("%d ",num); sort(a+1,a+k+1,comp); for (int i=1;i<=k;i++){ if (!f[a[i].now]||!f[a[i].to]) continue; int fx=findfather(a[i].now),fy=findfather(a[i].to); if (fx!=fy){ father[fx]=fy; ans+=a[i].dis; } } printf("%lld\n",ans); return 0;}
阅读全文
1 0
- BZOJ2753 滑雪与时间胶囊 (洛谷P2573)
- bzoj2753滑雪与时间胶囊
- bzoj2753滑雪与时间胶囊(最小生成树)
- BZOJ2753: [SCOI2012]滑雪与时间胶囊(最小生成树)
- 【BZOJ2753 || SCOI2012】滑雪与时间胶囊
- bzoj2753: [SCOI2012]滑雪与时间胶囊 MST
- 【SCOI2012】【BZOJ2753】滑雪与时间胶囊
- BZOJ2753: [SCOI2012]滑雪与时间胶囊
- bzoj2753 [SCOI2012]滑雪与时间胶囊
- BZOJ2753: [SCOI2012]滑雪与时间胶囊
- 图论练习题:【BZOJ2753 || SCOI2012】滑雪与时间胶囊
- 【最小生成树】[Scoi2012] bzoj2753 滑雪与时间胶囊
- 【bzoj2753】【scoi2012】【滑雪与时间胶囊】【最小生成树】
- 【codevs2399】【BZOJ2753】滑雪与时间胶囊,bfs+最小生成树
- 【bzoj2753】[SCOI2012]滑雪与时间胶囊 最小生成树
- 【BZOJ2753】【SCOI2012】滑雪与时间胶囊(最小生成树+层次图)
- 滑雪与时间胶囊
- SCOI2012(HYSBZ2753)“滑雪与时间胶囊”
- 【JZOJ100019】A 题解
- Flex 布局教程:语法篇
- 洛谷 P1328 生活大爆炸版石头剪刀布
- 常见的路由表生成算法
- POST和GET的区别!
- BZOJ2753 滑雪与时间胶囊 (洛谷P2573)
- eclipse 全局替换文件中的内容
- HTTP协议详解
- 在Rancher中添加为中国区优化的k8s应用商店的步骤和方法
- C++stl 向量,链表,栈,队列(vector, list, stack, queue)
- 【机房重构】之修改密码
- Ubuntu 16.04 LTS 为Firefox安装flash插件
- 数组
- 欧拉筛——线性筛素数和欧拉函数