The Shortest Path in Nya Graph HDU - 4725

This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just solo hay que cambiar un poco el algoritmo. If you do not understand a word of this paragraph, just move on. 
The Nya graph is an undirected graph with "layers". Each node in the graph belongs to a layer, there are N nodes in total. 
You can move from any node in layer x to any node in layer x + 1, with cost C, since the roads are bi-directional, moving from layer x + 1 to layer x is also allowed with the same cost. 
Besides, there are M extra edges, each connecting a pair of node u and v, with cost w. 
Help us calculate the shortest path from node 1 to node N.

Input

The first line has a number T (T <= 20) , indicating the number of test cases. 
For each test case, first line has three numbers N, M (0 <= N, M <= 10 5) and C(1 <= C <= 10 3), which is the number of nodes, the number of extra edges and cost of moving between adjacent layers. 
The second line has N numbers l i (1 <= l i <= N), which is the layer of i th node belong to. 
Then come N lines each with 3 numbers, u, v (1 <= u, v < =N, u <> v) and w (1 <= w <= 10 4), which means there is an extra edge, connecting a pair of node u and v, with cost w.

Output

For test case X, output "Case #X: " first, then output the minimum cost moving from node 1 to node N. 
If there are no solutions, output -1.

Sample Input

2
3 3 3
1 3 2
1 2 1
2 3 1
1 3 3

3 3 3
1 3 2
1 2 2
2 3 2
1 3 4

Sample Output

Case #1: 2
Case #2: 3

题目 是 有n个点在不同的楼层里(一层可能有多个点) 层间距是 c 相邻层里的点连通 另外有m条边

#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>
#include<cstdio>
#define Maxn 202200
#define inf 0x3f3f3f3f

using namespace std;
int head[Maxn];
int dis[Maxn];
int have[Maxn];
int ly[Maxn];

int ans;
int n;

struct node{
    int to, cost;
    int next;
}edge[Maxn * 8];

int vis[Maxn];
void init(){
    for(int i = 0; i <= n * 2; i++){
        head[i] = -1;
        have[i] = 0;
    }
    ans = 0;
}
void add(int from, int to, int cost){
    edge[ans].to = to;
    edge[ans].cost = cost;
    edge[ans].next = head[from];
    head[from] = ans++;
}
void spfa(){
    for(int i = 0; i <= 2 * n; i++){
        vis[i] = 0;
        dis[i] = inf;
    }
    dis[1] = 0;
    queue <int> que;
    que.push(1);
    vis[1] = 1;
    while(!que.empty()){
        int u = que.front();
        que.pop();
        vis[u] = 0;
        for(int s = head[u]; s != -1; s = edge[s].next){
            int v = edge[s].to;
            int cost = edge[s].cost;
            if(dis[v] > dis[u] + cost){
                dis[v] = dis[u] + cost;
                if(!vis[v]){
                    vis[v] = 1;
                    que.push(v);
                }
            }
        }
    }
}
int main(){
    int t;
    scanf("%d", &t);
    int up = 1;
    int m, c;
    while(t--){
        scanf("%d %d %d", &n, &m, &c);
        init();
        for(int i = 1; i <= n; i++){
            scanf("%d", &ly[i]);
            have[ly[i]] = 1;
        }
        for(int i = 1; i <= n - 1; i++){
            if(have[i] && have[i + 1]){
                add(n + i, n + i + 1, c);
                add(n + i + 1, n + i, c);
            }
        }
        for(int i = 1; i <= n; i++){
            add(n + ly[i], i, 0);
            if(ly[i] > 1)add(i, n + ly[i] - 1, c);
            if(ly[i] < n)add(i, n + ly[i] + 1, c);
        }
        for(int i = 1; i <= m; i++){
            int uu, vv, ww;
            scanf("%d %d %d", &uu, &vv, &ww);
            add(uu, vv, ww);
            add(vv, uu, ww);
        }
        spfa();
        printf("Case #%d: ", up++);
        int h = dis[n];
        if(h < inf)printf("%d\n", h);
        else printf("-1\n");
    }
    return 0;
}

 

GCN (Graph Convolutional Network) Shortest-Path-Master 是一种基于图卷积网络的最短路径算法。最短路径问题是图论中的经典问题,对于给定的图和起始点,找到到达目标点的最短路径。 GCN Shortest-Path-Master 通过应用图卷积神经网络的思想来解决最短路径问题。传统的最短路径算法(如Dijkstra算法或贝尔曼-福特算法)在计算过程中不考虑节点的特征信息,只利用图的拓扑结构。而GCN Shortest-Path-Master 利用了节点的特征信息,将节点的邻居节点信息通过图卷积操作进行聚合,得到节点的新特征表示。 GCN Shortest-Path-Master 的核心思想是,通过图卷积层不断更新节点的特征表示,使得节点的特征表示能够包含更多关于最短路径的信息。在每次迭代中,GCN Shortest-Path-Master 将节点的特征与邻居节点的特征进行聚合,得到节点的新特征表示。在网络的最后一层,通过对所有节点进行分类任务,可以得到每个节点到达目标点的最短路径预测。 相比传统的最短路径算法,GCN Shortest-Path-Master 提供了以下优势: 1. GCN Shortest-Path-Master 能够利用节点的特征,从而更好地表达节点之间的相互作用和联系。 2. GCN Shortest-Path-Master 可以自适应地学习节点的特征表示,而无需人工定义特征。 3. GCN Shortest-Path-Master 可以处理大规模的图结构,在计算效率上具有一定优势。 总之,GCN Shortest-Path-Master 是一种基于图卷积神经网络的最短路径算法,通过利用节点的特征信息,能够更好地解决最短路径问题。它在图结构数据中的应用具有很大潜力,在社交网络分析、推荐系统和物流路径规划等领域都有广泛的应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值