graph

本文介绍了一种使用最小瓶颈生成树解决特定图论问题的方法,该问题是关于如何规划路径使得在限定天数内通过图中的节点,每天行走的最大距离最短。文章提供了完整的AC代码实现。

Graph
( graph .cpp/c/pas)
Description
小 Y 又开始了一段旅途。
这次,他要经过一个图,从1号点到达n号点,每个点设有休息站。
小 Y 计划用最多k天走完全程,除第k天外,每一天小 Y 都必须在休息站过夜。所以,一段路必须在同一天走完。
小 Y 的体力有限,他希望走的路程最大的一天中走的路尽可能少,请求出这个最小值。
Input
第一行三个整数n、m、k表示图的顶点数、边数、天数。
从第二行开始,之后的m行,每行三个整数ui、vi、wi表示从ui和vi间有一条双向道路,长度为wi。
Output
一行一个正整数,如果小 Y 能走完全程,输出走的路程最大的一天中走的路程最小值,否则输出-1。
Example
graph.in
3 2 4
3 2 4
1 2 1
graph.out
4
附加样例见选手目录下『graph』文件夹。
Hint
对于10%的数据,m=0;
对于30%的数据,n,m,k<=10 ;
对于100%的数据,2<=n<=k<=7500,0<=m<=200000,1<=wi<=10^9;
保证没有重边和自环。

分析:刚开始没有看到题目中k<n,所以以为一天可以走多条路,做了一个spfa的预处理,处理出一个点到所有点的距离,然后空间爆了。其实一天只走一条路,那就简单多了。可以二分答案+spfa来做,90分,有一个点超时。
      然后又用最小瓶颈生成树打了一遍。

AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 7510
#define M 200010
using namespace std;
struct node
{
    int x,y,z;
};node e[M];
int fa[N],m,n,p;
bool cmp(const node&a,const node&b)
{
    return a.z<b.z;
}
int find(int x)
{
    if(fa[x]==x)return x;
    return fa[x]=find(fa[x]);
}
int main()
{
    freopen("graph.in","r",stdin);
    freopen("graph.out","w",stdout);
    scanf("%d%d%d",&n,&m,&p);
    for(int i=1;i<=n;i++)
      fa[i]=i;
    for(int i=1;i<=m;i++)
      scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z);
    sort(e+1,e+m+1,cmp);
    bool flag=false;int tot=0;
    for(int i=1;i<=m;i++)
    {
        int a=find(e[i].x),b=find(e[i].y);
        if(a!=b)
        {
            fa[a]=b;
            tot++;
        }
        if(find(1)==find(n))
        {
            printf("%d",e[i].z);
            flag=true;
            break;
        }
        if(tot==n-1)break;
    }
    if(!flag)printf("-1");
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/harden/p/5794698.html

03-28
### Graph 数据结构概述 Graph 是一种由节点(Vertex)和边(Edge)组成的抽象数据类型,用于表示对象之间的关系。在计算机科学领域,Graph 被广泛应用于社交网络分析、推荐系统、路径规划等领域。 #### Graph 的基本组成 - **顶点 (Vertex)**:代表图中的实体或对象。 - **边 (Edge)**:连接两个顶点的关系,可以是有向的也可以是无向的,还可以带权重来表示某种成本或距离。 #### 图的应用场景 - 社交网络建模:Facebook 和 LinkedIn 使用图来描述用户及其好友关系。 - 推荐引擎:通过构建商品购买行为图,预测用户的兴趣偏好。 - 地理信息系统:地图导航软件利用加权有向图计算最短路径[^1]。 --- ### Spark GraphX 中的 Graph 实现 Spark GraphX 提供了一种分布式图处理框架,支持大规模图数据集的操作。为了防止命名冲突,在导入 `org.graphstream.graph.Graph` 时通常将其重命名为其他名称,例如: ```scala import org.graphstream.graph.{Graph => GraphStream} ``` 这样做的目的是避免与其他库(如 GraphX 自身定义的 `Graph` 类型)发生命名冲突。如果仅使用单一类型的图,则无需担心此问题。 --- ### Java 图可视化工具 JUNG2 Java Universal Network/Graph Framework (JUNG2) 是一款功能强大的开源图形可视化库,适用于多种应用场景。以下是其主要特点: - 支持动态图绘制; - 提供丰富的布局算法(Layout),例如圆形布局、树形布局等; - 可自定义节点样式、标签显示等内容。 实现流程如下: 1. 创建并初始化图实例; 2. 配置合适的 Layout 布局策略; 3. 构造 View 对象完成最终渲染效果; 具体代码示例见下文[^2]: ```java // 导入必要类库 import edu.uci.ics.jung.graph.DirectedSparseGraph; import edu.uci.ics.jung.algorithms.layout.FRLayout; public class SimpleGraphExample { public static void main(String[] args){ DirectedSparseGraph<String, String> g = new DirectedSparseGraph<>(); // 添加节点 g.addVertex("NodeA"); g.addVertex("NodeB"); // 添加边 g.addEdge("AB", "NodeA", "NodeB"); FRLayout<String, String> layout = new FRLayout<>(g); System.out.println("Graph Created Successfully!"); } } ``` --- ### 在线可视化工具备选方案 除了上述提到的技术栈外,还存在一些优秀的在线资源可供学习研究者快速上手掌握各类经典数据结构与算法运作机制。比如 Data Structure Visualizations 这个站点提供了直观易懂界面让用户能够实时观察堆栈队列链表排序查找等一系列过程变化情况从而加深记忆印象[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值