2015多校第8场 HDU 5385 贪心,最小生成树
来源:互联网 发布:手机淘宝怎么改差评 编辑:程序博客网 时间:2024/06/10 05:33
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5385
题意:给了一个有向连通图,要给图中的每一条边加一个权值,使得满足dis[1]<dis[2]<dis[x]>dis[x+1]>dis[n]成立,x可以取到n。
解法:官方题解
如果我们知道每个点的dis值和最短路径树的话,方案是很容易构造的
我们可以采取贪心做法,一开始将1号点作为最短路径树的根,然后左边从2开始,右边从n开始,只要之前加入的点有边连向他们就加入
这样一个点加入的时间就是他的dis值,最短路径树上的父亲也可以确定,于是输出时非树边长度为n,树边长度为两个端点dis之差
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+10;int head[maxn], edgecnt;void init(){ edgecnt=0; memset(head,-1,sizeof(head));}struct edge{ int to,next;}E[maxn];void add(int u, int v){ E[edgecnt].to = v, E[edgecnt].next = head[u], head[u] = edgecnt++;}struct node{ int u,v;}q[maxn];int T,n,m,dis[maxn],vis[maxn];int main(){ scanf("%d", &T); while(T--) { init(); memset(vis, 0, sizeof(vis)); scanf("%d %d", &n,&m); for(int i=1; i<=m; i++){ int u,v; scanf("%d %d", &u,&v); q[i].u = u, q[i].v = v; add(u, v); } vis[1] = vis[n] = 1; int l=1,r=n,u; for(int i=1; i<=n; i++){ if(vis[l]==0) u=r--; else u=l++; dis[u] = i; for(int j=head[u]; ~j; j=E[j].next){ int v=E[j].to; vis[v]=1; } }// for(int i=1; i<=n; i++){// printf("%d ", dis[i]);// }// printf("\n"); for(int i=1; i<=m; i++){ if(dis[q[i].u] < dis[q[i].v]){ printf("%d\n", dis[q[i].v]-dis[q[i].u]); } else{ printf("%d\n", n); } } } return 0;}
阅读全文
0 0
- 2015多校第8场 HDU 5385 贪心,最小生成树
- 2015多校第8场 HDU 5386 Cover 贪心,暴力,玄学
- 贪心-最小生成树
- 并查集+最小生成树(贪心)HDU 1879
- HDU 4424 Conquer a New Region (最小生成树+贪心)
- 贪心方法:最小生成树
- 最小生成树-(贪心思想)
- 2015多校第8场 HDU 5380 Travel with candy 贪心,单调队列
- 2016 多校第一场 hdu 5723(最小生成树+dfs)
- HDU 5723 2016多校赛第一场 最小生成树+记忆化搜索
- 最小生成树+树上期望_____Abandoned country(hdu 5723 2016多校第一场)
- HDU 1233 还是畅通工程 (克鲁斯卡尔_最小生成树+贪心)
- 贪心算法和最小生成树
- 最小生成树Prim算法(贪心算法)
- 贪心算法——最小生成树
- 贪心算法 - 最小生成树 Prim算法
- 贪心算法 - 最小生成树 Kruskal算法
- 贪心算法之最小生成树Kruskal
- 【C++数据结构与算法】学习随笔二
- vue分页组件编写
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
- iOS之NSProcessInfo的使用
- java基础-----集合 set
- 2015多校第8场 HDU 5385 贪心,最小生成树
- win8升级win10后的windows.old怎么删除
- FTP服务搭建
- 设计模式之原型模式
- 手机通讯录增删改查(在ListView上面操作),复杂
- hdu 多校联赛 RXD and math
- MUI 示例注释
- Struts2学习笔记(一)——工作原理
- kafka的c/c++高性能客户端librdkafka简介